call,apply,bind

入参

call: 参数数量不固定。第一个参数指定了函数体内的this指向,从第二个参数开始往后,每个参数被依次传入函数。
apply: 接受两个参数。第一个参数指定了函数体内的this指向。第二个参数接受一个数组 [1,2],但函数拿到的是解构后的入参 1,2 (同call效果)。
bind: 同call。

注意: 第一个入参为null时是用来占位,不改变this指向。

区别

callapply:第二个入参不同,接受参数数量不同。
bindcall,apply:bind创建一个新的函数,不会直接执行,可以固定写多个传参;call,apply会直接执行;

demo

  var person = function(one, two, ...other) {
    return `${this.firstName},${this.lastName},${one},${two},${other}`
  }
  var person1 = {
    firstName: 'A',
    lastName: 'B'
  }

  // 【apply】this指向: 使person方法的this指向了person1,此时可以使用person1上的方法和属性
  const a = person.apply(person1, ['C', 'D', 'E', 'F']); // A,B,C,D,E,F

  // 【call】 this指向: 同apply;
  const b = person.call(person1, 'C', 'D', 'E'); // A,B,C,D,E

  // 【bind】 this指向: 同apply;
  // 创造出一个新的函数bindFun1,而bindFun1其实就是绑定了person,且person的this指向了person1
  const bindFun1 = person.bind(person1);
  console.log('==========(bindFun1)========>>>', bindFun1('C', 'D')); // A,B,C,D,

  // 固定一个参数C,调用时传入两个参数
  const bindFun2 = person.bind(person1, 'C');
  console.log('==========(bindFun2)========>>>', bindFun2('D', 'E')); // A,B,C,D,E


  // apply使用场景:当一个函数的入参是非数组,而你的数据是数组时可以使用
  Math.max(1, 2, 3) // 3
  Math.max([1, 2, 3]) // 报 错
  Math.max.apply(null, [1 , 2, 3]) // 3
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值