Der mit Ihnen in diesem Artikel geteilte Inhalt befasst sich beispielsweise mit dem Parsen von Js. Freunde in Not können sich darauf beziehen
Als ich mir vor ein paar Tagen Interviewfragen ansah, sah ich dieses Programm:
obj = { name: 'a', getName: function () { console.log(this.name); } }; var fn = obj.getName;obj.getName();fn();
Die erforderliche Frage ist hierfn()
Das Ausführungsergebnis und Ausführungszeit this
Zeigeproblem. Lassen Sie uns die Verwendung anhand dieses Beispiels und der darin enthaltenen Fragen noch einmal zusammenfassen.
Die Richtung davon wird entsprechend seiner Ausführungsumgebung bestimmt. Es gibt hauptsächlich die folgenden Situationen:
Die globale Umgebung liegt außerhalb jeder Funktion. Wenn diese verwendet wird, bezieht sich dies auf das globale Objekt. Zum Beispiel im Browser:
this === window // true
Im Funktionskontext, also beim Aufruf innerhalb der Funktion, kommt es darauf an, wie dieser aufgerufen wird.
Bei einem einfachen Aufruf zeigt dies in der Funktion auf das globale Objekt, wie zum Beispiel:
function myFun() { console.log(this === window); } myFun(); // true
Im obigen Beispiel ist die Funktion myFun
wird direkt aufgerufen, wobei this
gleich dem globalen Objekt window
ist.
Das Prinzip besteht darin, dass bei der Deklaration der Funktion myFun
diese als Attribut des globalen Objekts existiert . Wenn diese Funktion also direkt verwendet wird, entspricht sie dem Aufruf von window.myFun()
, d. h. wenn sie als Attribut von window
aufgerufen wird, zeigt this
auf window
.
Debuggen Sie dieses Programm im Browser, um es klarer zu überprüfen:
Wenn eine Funktion als verwendet wird Methode eines Objekts Beim Aufruf zeigt dies auf dieses Objekt. Nehmen wir das erste Beispiel als Beispiel: Wenn obj.getName()
ausgeführt wird, zeigt dies in der Funktion auf das Objekt obj. Also Ausgabe a
.
Aber wenn wir diese Funktion separat trennen, ändern Sie das ursprüngliche Beispiel:
function myFun() { console.log(this.name); }var obj = { name: 'a', getName: myFun }; obj.getName(); // avar obj2 = { name: 'b', fun: myFun }; obj2.fun(); // b
Wie aus diesem Beispiel ersichtlich ist, hängt die Richtung von this
vollständig von der nächstgelegenen Elementreferenz < ab 🎜>, an welches Objekt und welche Referenz die Funktion gebunden ist, dann hat dies unterschiedliche Punkte. Im obigen Beispiel haben wir die Funktionen mit an verschiedene Objekte als ihre Methoden gebunden, dann werden die ihnen entsprechenden This an verschiedene Objekte gebunden und die Werte von this
werden unterschiedlich sein. this.name
Wenn wir
direkt ausführen, wird diese Funktion ebenfalls als Eigenschaft des globalen Objekts myFun()
aufgerufen. Das Attribut window
kann also nicht gefunden werden und myName
wird ausgegeben. undefined
(Da das globale Objekt das Standardattribut window
hat, das eine leere Zeichenfolge ist, wird name
hier als Beispiel verwendet) myName
function myFun() { console.log(this.myName); } myFun(); // undefined
ist obj.getName
zugewiesen, daher entspricht die Ausführung von fn
der Ausführung von fn
, d. h. die anonyme Funktion, die ursprünglich als Attribut von obj initialisiert wurde, ist an window.fn()
von -Attribut, daher zeigt sein window
auf fn
. this
Das window
-Attribut von
ist eine leere Zeichenfolge, daher ist die Ausgabe leer. window
name
Verwandte Empfehlungen:
Das obige ist der detaillierte Inhalt vonBeispiel für das Parsen in Js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!