模拟bind实现

243 阅读1分钟

bind介绍

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

模拟bind实现

/**
* 模拟bind实现
*/
Function.prototype.simulateBind = function (context) {
    if (typeof this !== 'function') {
        throw new Error('Function.prototype.bind - what is trying to be bound is not callable');
    }
    var self = this;
    var args = Array.prototype.slice.apply(arguments, 1);
    var fNOP = function () {};
    var fbound = function () {        
        self.apply(this instanceof self ? this : context, args.concat(Array.prototype.slice.call(arguments)));
    }
    fNOP.prototype = this.prototype;
    fbound.prototype = new fNOP();
    return fbound;
}


参考资料

  1. juejin.cn/post/684490…

微信公众号“前端那些事儿”