bind()、call()和apply()

bind()、call()、apply()相同点:

1、三者都可以改变函数this的指向问题
2、三者的第一个参数都是this要指向的对象,也就是想指定的上下文
3、三者都可以利用后续参数传参

bind()、call()、apply()不同点:

bind 是返回对应函数,便于稍后调用;apply 、call 则是立即调用 。

call()和apply()

call() 和 apply() 的作用就是间接调用方法或函数,并将方法或函数内部的this动态绑定到对象身上。
call() 和 apply() 方法的异同:
不同:传参形式不同 ,call() 以列表的形式传参,apply() 以数组的形式传参
2 call和apply的参数。
从第1点我们已经分析出了call和apply的第一个参数的意义。它不是给被调用的方法或函数传递的。
而是用来绑定到方法和函数内部的this的。那如果方法和内部里面没有用到this怎么办呢?传null。
例如: function add(){ alert(“123456”); } 对于这个函数
add(); 和 add.call(null); 和 add.apply(null); 效果完全一样。
那么,如何给被调用的方法或函数传递参数呢?从第二个参数开始。
对于call:它是以有序的参数列表传递给方法和对象的。所以你被调用的方法有多少个形参,
你的call从第二个参数开始就要传递多少个实参。
对于apply:它是以数组的形式封装参数的。即把方法或函数需要的所有参数。用一个
数组的形式全部装起来。实际使用的时候,会从数组下标为0的位置一一开始
取出实参。
3 异同:
3.1如果需要绑定this,并且被调用的函数和方法需要传参:
xxx.call(对象,p1,p2,…pn); <=> xxx.apply(对象,[p1,p2,…pn]);
3.2如果需要绑定this,并且被调用的函数和方法不需要传参:
xxx.call(对象); <=> xxx.apply(对象);
3.3如果不需要绑定this,并且被调用的函数和方法需要传参:
xxx.call(null,p1,p2,…pn); <===> xxx.apply(null,[p1,p2,…pn]);
3.4如果不需要绑定this,并且被调用的函数和方法不需要传参:
xxx.call(null); <=> xxx.apply(null); <=> xxx.call();<=>xxx.apply();

https://www.cnblogs.com/web-wjg/p/9250950.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值