bind


bind 函数的实现步骤

  1. 判断调用对象是否为函数,即使我们是定义在函数的原型上的,但是可能出现使用 call 等方式调用的情况。
  2. 保存当前函数的引用,获取其余传入参数值。
  3. 创建一个函数返回
  4. 函数内部使用 apply 来绑定函数调用,需要判断函数作为构造函数的情况,这个时候需要传入当前函数的 this 给 apply 调用,其余情况都传入指定的上下文对象。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// bind 函数实现
Function.prototype.myBind = function(context) {
 // 判断调用对象是否为函数
 if (typeof this !== "function") {
   throw new TypeError("Error");
}
 // 获取参数
 var args = [...arguments].slice(1),
     fn = this;
 return function Fn() {
   // 根据调用方式,传入不同绑定值
   return fn.apply(
     this instanceof Fn ? this : context,
     args.concat(...arguments)
  );
};
};