apply与call还有bind区别详解

相同点  都是改变this指向的

不同点 :

首先是传递参数不同

call和bind可以直接写多个参数 

apply如果想传递多个参数 需要用数组方法,只有两个参数

call和apply是对函数进行直接调用  bind方法是返回的仍然是一个函数

应用场景

1:参数的形式是数组的时候,比如apply里面传递了参数arguments,参数是数组类型,并且在调用Person的时候参数的列表是对应一致的就用 apply。

2:如果Person的参数列表是这样的(age,name),而Student的参数列表是(name,age,grade),这样就可以用call来实现了,也就是直接指定参数列表对应值的位置(Person.call(this,age,name,grade));call方法:

call(指向对象,x,y,z,…)

apply方法:apply(指向对象,[x,y,z])

3:bind方法在调用的时候也可传参,另外bind不兼容ie6-8

var a ={
    name:'一一',
    age:'22',
    sex:'女',
    hobby:'写代码'
    say:function(sex,hobby) {         
        console.log(this.name,this.age,sex,hobby)      
    }
}
var b = {
    name:'二二',
    age:'23',
}
a.say.call(b,'男','学习');
//李明明 22 男 学习
a.say.apply(b,['男','学习'])
//李明明 22 男 学习
bind可以向cally一样传参:
例如:
a.say.bind(b,'男','学习')();
//李明明 22 男 学习
但由于bind返回的仍然是一个函数,所以我们还可以在调用的时候再进行传参。
例如:
a.say.bind(b)('男','学习');
//李明明 22 男 学习

注意:如果不传参数,或者第一个参数是nullnudefinedthis都指向window


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫LiLi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值