Il polyfill MDN binding è mostrato di seguito.Spiegazione di una riga in MDN bind polyfill
sto cercando di capire lo scopo della
this instanceof fNOP ? this : oThis
nel fToBind.apply
invocazione.
Non riesco a capirlo. Qualcuno può aiutare a far luce?
Function.prototype.bindMdn = 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, aArgs.concat(Array.prototype.slice.call(arguments)));
}
;
if (this.prototype) {
// Function.prototype doesn't have a prototype property
fNOP.prototype = this.prototype;
}
fBound.prototype = new fNOP();
return fBound;
};
sembra essere un cortocircuito se un'istanza della funzione legata è fornito come bersaglio quando si richiama la funzione vincolato, ma il controllo typeof dovrebbe prendere questo, quindi non comprendono la sua presenza.
Link alla pagina MDN:
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind
Edit: Questa è una domanda diversa da quella suggerita duplicato. Il duplicato suggerito chiede perché è necessario fNOP
. L'ho completamente bruciato.
Questa domanda spiega perché è necessario il controllo instanceof
e quale funzione serve. Presento sopra la mia ipotesi di cortocircuito, insieme a una ragione per cui ciò non ha pienamente senso.
Ti dispiacerebbe aggiungere il collegamento della pagina MDN per favore? –
@mortezaT [MDN: Function.prototype.bind() Polyfill] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Polyfill) –
Probabilmente un duplicato di [ Funzione associata MDN Function.prototype.bind chiamata come costruttore] (http://stackoverflow.com/questions/23693282) –