In JavaScript beinhalten Methoden häufig den folgenden Kontext, sodass sie häufig nicht direkt in Anführungszeichen gesetzt werden können. Nehmen Sie als Beispiel das häufigste Beispiel: console.log("info...") und verwenden Sie log direkt („info...“), fällt Ihnen automatisch folgende Syntax ein:
var log = console.log; log("info…");
Leider ist beim Ausführen der Fehler aufgetreten: TypeError: Illegal invocation.
Warum? Für console.log("info...") wird die Protokollmethode für das Konsolenobjekt aufgerufen, sodass diese in der Protokollmethode auf das Konsolenobjekt verweist und wir die Protokollvariable verwenden, um auf die Methode console.log zu verweisen. Rufen Sie dann die Protokollmethode direkt auf. Wenn der Kontext inkonsistent ist, wird natürlich ein Fehler gemeldet.
An diesem Punkt können wir die Bindungsmethode verwenden, um dieses Problem zu lösen. Mit der Bindungsmethode können Sie dies manuell als Kontext der aktuellen Methode übergeben und dann die Methode zurückgeben, die den Kontext enthält, zum Beispiel:
var log = console.log.bind(console); log("info...");
Auf diese Weise treten keine Fehler auf.
Allerdings unterstützt die Bind-Methode IE 8 und niedrigere Browser nicht. Wir können eine selbst implementieren, sie ist sehr einfach.
Function.prototype.bind = Function.prototype.bind || function(context){ var _this = this; return function(){ _this.apply(context, arguments); }; };
Der Kern wird durch die Apply-Methode implementiert, eine klassische Abschlussanwendung. _this zeigt auf die aktuelle Methode und context zeigt auf den Kontext der aktuellen Methode, auf die beide über Abschlüsse zugegriffen werden können.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er gefällt Ihnen allen.