什么是“这个fNOP的实例?这个”在做什么?

时间:2012-04-13 10:14:22

标签: javascript

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;
    };
}

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

1 个答案:

答案 0 :(得分:1)

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

如果thisfNOP的实例,则第一个参数将为this。如果没有,那么它将是oThis,如果它是“真实的”(非空,未定义且任何与false同义),或window的{​​{1}}为假。

这是此代码的简写:

oThis