javascript中apply、call和bind的区别

相同点

  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方法中一一对应的,这就是两者最大区别.
原文讲解点这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值