手写bind函数

if (!Function.prototype.bind) {
    Function.prototype.bind = function (oThis) {
        if (typeof this !== 'function') {
            throw new TypeError('not function');
        }
        var aArgs = Array.prototype.slice.call(arguments,1),
            fToBind = this,
            fNOP = function () {},
            fBound = function () {
                return fToBind.apply(
                    this instanceof fNOP?this:oThis,
                    aArgs.concat(Array.prototype.slice.call(arguments))
                    );
            }
        fNOP.prototype = this.prototype;
        fBound.prototype = new fNOP();
        return fBound;
    }
}

参考文章:手写bind()函数,理解MDN上的标准Polyfill

你可能感兴趣的:(手写bind函数)