Почему бы просто не проверить этот экземпляр fBound в методе привязки polyfill?

#bind #polyfills

Вопрос:

Это более старая версия bind метода polyfill из MDN:

 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 amp;amp;
                        oThis ? this : oThis
                    ),
                    aArgs.concat( Array.prototype.slice.call( arguments ) )
                );
            }
        ;

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

        return fBound;
    };
}
 

И я путаюсь с this instanceof fNOP этим. Я знаю, что иногда мы можем вызвать метод fBound return by bind в качестве функции конструктора. Подобный этому:

 const fn2 = fn1.bind()
new fn2()
 

Поэтому я думаю, что цель this instanceof fNOP состоит в том, чтобы помочь судить о том, как мы вызываем функцию return bind методом и делаем что-то относительно. Но почему бы просто не проверить this instanceof fBound здесь? Если fBound вызывается как функция конструктора, то this должен быть экземпляр fBound, верно?

PS: Последняя версия bind polyfill превратила this instanceof fNOP проверку в fNOP.prototype.isPrototypeOf(this) проверку, но я думаю, что цель та же. Во всяком случае, он все равно проверяет fNOP вместо fBound , чего я не совсем понимаю.