javascript中apply、call和bind的区别

来源:互联网 发布:中宏产业数据库 编辑:程序博客网 时间:2024/06/05 04:00

相同点

  1. 都是改变函数this对象的指向的.
  2. 第一个参数都是this要指向的对象.
  3. 都可以利用后续参数传参.

区别

案例一:
(区分call\apply与bind的区别)

var ww = {    name:"旺旺",    gender:"男",    age:24,    say:function(){          alert(this.name+","+this.gender+",今年"+this.age);    }}var yy = {    name:"鱼鱼",    gnder:"女",    age:18}ww.say();

结果显示为:旺旺,男,今年24
?如何让ww的say方法显示yy的数据,如下:

  • call方法 ww.say.call(yy);
  • apply方法 ww.say.apply(yy);
  • bind方法 ww.say.apply(yy)();

所以call和apply都是对函数直接调用,而bind方法返回的仍然是一个函数,所以还要用()来进行调用才可以.
案例二:
(区分call与apply的区别)

var ww = {    name:"旺旺",    gender:"男",    age:24,    say:function(school,grade){          alert(this.name+","+this.gender+",今年"+this.age+",在"+school+"上"+grade);    }}var yy = {    name:"鱼鱼",    gnder:"女",    age:18}ww.say();
  • call ww.say.call(yy,"实验中学","六年级");
  • applyww.say.call(yy,["实验中学","六年级"]);
  • bind ww.say.call(yy,"实验中学","六年级")();

区别在于call后面的参数与say方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素与say方法中一一对应的,这就是两者最大区别.
原文讲解点这里

0 0
原创粉丝点击