#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
, чего я не совсем понимаю.