前端开发

JavaScript中apply、call和bind方法的区别

2018-09-17  本文已影响4人  番茄沙司a

前言

JavaScript中,这三者都是可以用来改变this指向进行上下文绑定的,它们之间既有相似之处也有不同之处。

相似之处

  1. 都是用来改变函数的this对象的指向的
  2. 第一个参数都是this要指向的对象
  3. 都可以利用后续参数传参

区别

  1. call和apply都是对函数的直接调用(也叫直接执行函数),而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以(将上下文绑定到bind()括号中的参数上,然后将它返回)。所以,bind后函数不会执行,而只是返回一个改变了上下文的函数副本
  2. call和apply都可以传参数。call后面的参数与fn方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和fn方法中一一对应的,这就是两者最大的区别。
  3. bind是ES5中的方法,可以向call一样传参,也可以在调用的时候再进行传参。

总结

  1. 当我们使用一个函数需要改变this指向的时候才会用到call apply bind
  2. 如果你要传递的参数不多,则可以使用fn.call(thisObj, arg1, arg2 ...)
  3. 如果你要传递的参数很多,则可以用数组将参数整理好调用fn.apply(thisObj, [arg1, arg2 ...])
  4. 如果你想生成一个新的函数长期绑定某个函数给某个对象使用,则可以使用const newFn = fn.bind(thisObj); newFn(arg1, arg2...)
上一篇下一篇

猜你喜欢

热点阅读