浅显易懂call,apply,bind的区别

call,apply,bind都是可以改变this的指向,那么它们三者之间的区别是什么,我们今天来看看。


先看这段代码:

const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah'
  },
  getName: function(a, b) {
    console.log(this.name, a+b)
  }
};

adventurer.getName(1, 2) // "Alice" 3

const user = {
  name: 'yebuyu'
}

adventurer.getName.call(user, 3, 4) // yebuyu" 7

adventurer.getName.apply(user, [3, 4]) // "yebuyu" 7

adventurer.getName.bind(user, 3, 4)() // "yebuyu" 7

adventurer.getName.bind(user)(3, 5) // "yebuyu" 8

adventurer.getName.bind(user, 3)(5) // "yebuyu" 8

  • call 、bind 、 apply 这三个函数的第一个参数都是 this 的指向对象

  • call 从第二个参数开始为调用的函数参数,并且是以逗号隔开;apply的第二个参数为数组,数组元素为调用的函数参数;bind 的传参跟call一样;

  • call和apply是直接执行函数;但是bind 返回的是一个新的函数,你必须调用它才会被执行故加上()调用函数;

  • bind()函数有两个地方可以传参;可参考代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值