存在意义

改变this的指向。

区别

  • call、apply与bind的差别

    call和apply改变了函数的this上下文后便执行该函数,而bind则是返回改变了上下文后的一个函数。 call和apply必须一次调用,bind可以实现柯里化,多次调用

  • call、apply的区别

    他们俩之间的差别在于参数的区别,call和apply的第一个参数都是要改变上下文的对象,而call从第二个参数开始以参数列表的形式展现,apply则是把除了改变上下文对象的参数放在一个数组里面作为它的第二个参数。

手写

  1. Function.prototype.myCall = function (context) {
  2. let context = context || window
  3. context[fn] = this
  4. let args = [...this.arguments].slice(1)
  5. let result = context[fn](...args)
  6. delete context[fn]
  7. return result
  8. }
  1. Function.prototype.myApply = function (context) {
  2. let context = context || window
  3. context[fn] = this
  4. let result = context[fn](...this.arguments[1])
  5. delete context[fn]
  6. return result
  7. }
  1. Function.prototype.myBind = function (context) {
  2. let self = this
  3. let args = [...arguments].slice(1)
  4. return function () {
  5. return self.apply(context, arg.concat([...arguments]))
  6. }
  7. }