跳到主要内容

简述自己实现一个 bind ?

参考答案:

bind() 是 JavaScript 中的一个函数方法,它创建一个新的函数,当调用这个新函数时,bind() 的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数。

要实现一个简单的 bind(),我们需要考虑以下点:

  1. 新的函数在调用时,需要让原始函数的 this 指向 bind() 的第一个参数。
  2. bind() 的第二个及以后的参数,需要在调用新函数时,作为原始函数的参数。
  3. 如果 bind() 没有任何参数,或者第一个参数不是函数,那么需要返回原函数。

下面是一个简单的 bind() 的实现:

Function.prototype.myBind = function(context) {
    var self = this;  // 保存原函数
    // 获取bind()的第二个及以后的参数
    var args = Array.prototype.slice.call(arguments, 1);  
    // 返回一个新函数
    return function() {
        // 获取bind返回的函数传入的参数
        var bindArgs = Array.prototype.slice.call(arguments);
        // 执行原函数,并返回结果
        return self.apply(context, args.concat(bindArgs));
    }
}

这个 myBind 方法会返回一个新的函数,当这个新函数被调用时,会调用原始函数 selfselfthis 被设置为 contextself 的参数是 bind() 的第二个及以后的参数和 myBind 返回的函数传入的参数的组合。

这样,我们就实现了一个简单的 bind() 方法。

需要注意的是,这个实现并不完全等同于原生的 bind() 方法,原生的 bind() 方法返回的函数可以用作构造函数,即可以通过 new 关键字来调用,而上面的实现并不支持这一点。如果需要支持这一点,那么实现会稍微复杂一些。