Wie lässt sich feststellen, worauf dies hinweist?
Wie ist dieses Prinzip zu verstehen?Um JavaScript zu lernen, müssen Sie die folgenden zwei Schreibweisen verstehen: var obj = { foo: Funktion () {} }; var foo = obj.foo; //Methode 1 schreiben obj.foo() //Methode 2 schreiben foo() Diese beiden Schreibweisen sind ein Funktionsaufruf und eine Objektmethode. Obwohl obj.foo und foo beide auf eine Funktion verweisen, können ihre Ausführungsergebnisse unterschiedlich sein. Sehen Sie sich den folgenden Code an: var obj = { foo: Funktion () { konsole.log(diese.bar) }, Takt: 1 }; var foo = obj.foo; var Balken = 2; obj.foo() // 1 foo() // 2 Warum sind die Laufergebnisse unterschiedlich? Da der Funktionskörper das Schlüsselwort this verwendet, erfahren Sie in vielen Lehrbüchern und Materialien, dass sich this auf die Umgebung bezieht, in der die Funktion ausgeführt wird. Bei obj.foo() wird foo in der obj-Umgebung ausgeführt, daher verweist dies auf obj; bei foo() wird foo in der globalen Umgebung ausgeführt, daher verweist dies auf die globale Umgebung. Daher sind die Betriebsergebnisse der beiden unterschiedlich. Wie ermitteln Sie also, worauf dies hinweist? Oder in welcher Umgebung läuft dies? var obj = { foo: 5 }; Der obige Code weist der Variablen obj ein Objekt zu. Die JavaScript-Engine generiert zuerst ein Objekt {foo: 5} im Speicher und weist dann obj die Adresse dieses Objekts zu. obj ist eine variable Adresse. Beim Lesen von obj.foo wird zuerst die Speicheradresse von obj abgerufen, dann wird das Originalobjekt von dieser Adresse gelesen und das Attribut foo zurückgegeben. Wie wird die Foo-Eigenschaft im Speicher gespeichert? { foo: { [[Wert]]: 5 [[schreibbar]]: wahr [[aufzählbar]]: wahr [[konfigurierbar]]: wahr } } Der Wert des foo-Attributs wird im Value-Attribut des Attributbeschreibungsobjekts gespeichert. Was ist, wenn der Wert der Eigenschaft eine Funktion ist? var obj = { foo: Funktion () {} }; Zu diesem Zeitpunkt speichert die JavaScript-Engine die Funktion separat im Speicher und weist dann die Adresse der Funktion dem Wertattribut des Foo-Attributs zu. { foo: { [[Wert]]: Die Adresse der Funktion... } } Da eine Funktion separat im Speicher abgelegt wird, kann sie in unterschiedlichen Umgebungen (Kontexten) ausgeführt werden. var f = Funktion () {}; var obj = { f: f }; // Führe f() alleine aus // obj-Umgebung führt obj.f() aus JavaScript ermöglicht es Ihnen, innerhalb eines Funktionskörpers auf andere Variablen in der aktuellen Umgebung zu verweisen. var f = Funktion () { console.log(x); }; Diese Funktion verwendet andere Variablen X. Schauen Sie sich den Code unten an var f = Funktion () { konsole.log(dies.x); } var x = 1; var obj = { f: f, x: 2, }; // Führe f() alleine aus // 1 // obj-Umgebung führt obj.f() aus // 2 Sie können sehen, dass die Ergebnisse der Funktionsausführung unterschiedlich sind. Funktion f wird global ausgeführt, was ist also mit diesem? this.x bezieht sich auf das x der globalen Umgebung. Was obj.f betrifft, das in der obj-Umgebung ausgeführt wird, so befindet sich this offensichtlich in der obj-Umgebung, sodass this auf obj.x in der obj-Umgebung verweist. Zu Beginn des Artikels findet obj.foo() foo über obj, sodass es in der obj-Umgebung ausgeführt wird. Sobald var foo = obj.foo, zeigt die Variable foo direkt auf die Funktion selbst, und die Funktion foo() selbst befindet sich in der globalen Umgebung, sodass foo() in der globalen Umgebung ausgeführt wird. Funktion foo() { konsole.log(dieser.name); } Funktion Foo(fn) { fn(); } var obj = { Name: 'zl', foo, } var name = "Ewig"; Foo(Objekt.foo); Was ist also das Ergebnis der Ausführung des obigen Codes? Dies ist das Ende dieses Artikels über das Prinzip und die detaillierte Erklärung von JavaScript this. Für relevantere JavaScript this-Inhalte suchen Sie bitte nach früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die folgenden verwandten Artikel weiter. Ich hoffe, Sie werden 123WORDPRESS.COM in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
>>: Es ist Jahresende, ist Ihr MySQL-Passwort sicher?
Vorwort Bei der tatsächlichen Entwicklung werden ...
Inhaltsverzeichnis 1. Vergleich mit Vue2 1. Neue ...
Im Docker Starten Sie alle Containerbefehle Docke...
Hintergrund Es gibt einen Tencent Linux Cloud-Hos...
Dieser Artikel stellt hauptsächlich den Installati...
Hintergrundbeschreibung: Auf einem vorhandenen La...
Ausführen des Skripts im Debugmodus Sie können da...
Hinweis: Das System ist Ubuntu 14.04LTS, ein 32-B...
Datenträger automatisch erkennen Konfigurationssc...
In diesem Artikelbeispiel wird der spezifische Co...
1. Befehlseinführung Der Befehl usermod (user mod...
In diesem Artikel wird der spezifische Code der V...
1. SHOW PROCESSLIST-Befehl SHOW PROCESSLIST zeigt...
Beim Laden von Netzwerkdaten wird zur Verbesserun...