4
if (!Function.prototype.bind) {
    Function.prototype.bind = function (oThis) {
        if (typeof this !== "function") {
            // closest thing possible to the ECMAScript 5 internal IsCallable function  
            throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
        }

        var aArgs = Array.prototype.slice.call(arguments, 1),
            fToBind = this,
            fNOP = function () {},
            fBound = function () {
                return fToBind.apply(this instanceof fNOP ? this : oThis || window, aArgs.concat(Array.prototype.slice.call(arguments)));
            };

        fNOP.prototype = this.prototype;
        fBound.prototype = new fNOP();

        return fBound;
    };
}

这是从绑定 MDC中挑选的,我不明白在this instanceof fNOP ? this做什么。请问有人教我吗?我想知道为什么不oThis || window直接使用。

4

1 回答 1

1
return fToBind.apply(this instanceof fNOP ? this : oThis || window, aArgs.concat(Array.prototype.slice.call(arguments)));

如果this是 的实例fNOP,则第一个参数将是this。如果不是,那么它将是oThis“真实的”(不是 null、不是未定义以及任何与 false 同义的东西),或者windowofoThis是 false。

它是此代码的简写:

if(this instanceof fNOP){
    firstparameter = this;
} else {
    if(oThis){
        firstParameter = oThis;
    } else {
        firstParameter = window;
    }
}
于 2012-04-13T10:18:25.150 回答