call, apply和bind

call, apply和bind

这三个方法都是用来改变 this 指向的对象的。

  • Function.prototype.call()
  • Function.prototype.apply()
  • Function.prototype.bind()

用法

语法

call: function_name.call(new_target_object, param1, param2, ..., paramN)

apply: function_name.apply(new_target_object, [param1, param2, ..., paramN])

bind: function_name.bind(new_target_object, param1, param2, ..., paramN)

call和apply

对于call和apply,第一个参数都是this绑定到的新对象,且如果第一个参数是 null ,this就会指向 window
对于call:第二个参数开始可以传参给这个函数。
对于apply:第二个参数是一个数组,数组中的每个元素作为这个函数的参数。

bind

bind方法返回一个修改过的函数。
bind第一个参数也是新对象,从第二个参数开始可以传给这个函数。

bind传参的方式有两种,第一种是在bind时就预先穿进去参数:
function_name.bind(new_target_object, param1)

第二种是在调用是传参,bind时预先传的参数会排在前面,调用时传的参数在后面。

总结

call和apply都是改变这个函数的this指向并立刻执行这个函数,两者的区别仅仅在于传参的不同。而bind返回的是函数,可以先将bind后的函数保存到变量,在需要调用这个函数的时候调用这个函数并且可以传参进去。

ref

  1. https://www.cnblogs.com/pssp/p/5215621.html
  2. https://www.runoob.com/w3cnote/js-call-apply-bind.html

评论