Heute habe ich weiterhin die Implementierung der Bindungsfunktion untersucht und auch die Aussagen von Shim und Polyfill gelernt. Lassen Sie es uns jetzt zusammenfassen.
if (! function.prototype.bind) {function.prototype.bind = function (othis) {if (typeof this! } var aArgs = Array.prototype.slice.call(arguments, 1), fToBind = this, fNOP = function () {}, fBound = function () { return fToBind.apply(this instanceof fNOP && oThis ? this : oThis || window, aArgs.concat(Array.prototype.slice.call(arguments))); }; fnop.Prototype = this.Prototype; fBound.Prototype = new fnop (); FBOund zurückgeben; };}Dies ist eine Implementierung im offiziellen Dokument. Ich werde darüber sprechen, was ich in zwei Aspekten sagen möchte.
Der erste ist der Parameter, die Verwendung von Agragen
var aargs = array.prototype.slice.call (Argumente, 1), hier wird das Parameter -Array der Bindungsfunktion herausnehmen. Der erste Parameter ist nicht (dh nicht othis), was das Objekt ist, das an die Methode gebunden werden muss, und das zweite ist
aargs.concat (Array.Prototype.slice.call (Argumente))); Hier verwenden wir die Array -Methode und fügen die Parameter hinter dem Parameterarray ein. Beachten Sie, dass diese Funktion zurückgegeben und ausgeführt wird. Sein Parameter -Array ist das Parameterarray der zurückgegebenen FBOund -Funktion, sodass die oberen und unteren Parameterarrays etwas wie Curry unterschiedlich sind.
Der zweite ist der Kontext, in dem sich der Kontext ändert. Die Bindungsfunktion wird hauptsächlich zur Bindung des Kontextes verwendet.
ftobind = Dies hier ist der Kontext des Objekts, gefolgt von der folgenden Methode, damit das Objekt den Kontext verwenden kann
fnop.Prototype = this.Prototype;
fBound.Prototype = new fnop ();
Hier wird FNOP als Vermittler für FBOund verwendet, um sicherzustellen, dass FBOund im Kontext ausgeführt wird, wenn es definiert ist. ursprünglich
bound.Prototype = self.Prototyp kann die ursprünglichen Attribute integrieren, aber auf diese Weise verweisen beide Objektattribute auf dieselbe Stelle und ändern bound.Prototypen zu Selbst. Daher kann der Übergang durch eine leere Funktion NOP diese Situation effektiv verhindern.
Der obige Artikel über die einfache Implementierung der Bindungsfunktion in nativem JS ist der gesamte Inhalt, den ich mit Ihnen geteilt habe. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.