js之call,apply,bind

225 阅读1分钟

一bind

  1. 三者都是用于改变函数体内this的指向,但是bind与apply和call的最大的区别是:
  2. bind不会立即调用,而是返回一个新函数,称为绑定函数,其内的this指向为创建它时传入bind的第一个参数,而传入bind的第二个及以后的参数作为原函数的参数来调用原函数。

二 apply,call

  1. apply和call都是为了改变某个函数运行时的上下文而存在的(就是为了改变函数内部this的指向);
  2. apply和call的调用返回函数执行结果;
  3. 如果使用apply或call方法,那么this指向他们的第一个参数,apply的第二个参数是一个参数数组,call的第二个及其以后的参数都是数组里面的元素,就是说要全部列举出来;

三 用法总结

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