Heim  >  Artikel  >  Web-Frontend  >  Javascript-Studiennotizen - Funktionen (2): Der Arbeitsmechanismus dieser_Grundkenntnisse

Javascript-Studiennotizen - Funktionen (2): Der Arbeitsmechanismus dieser_Grundkenntnisse

WBOY
WBOYOriginal
2016-05-16 16:43:17997Durchsuche

Im globalen Maßstab

dieses;
Wenn dies im globalen Bereich verwendet wird, zeigt es auf das globale Objekt.
Hier finden Sie eine ausführliche Einführung in globale Objekte:

Globales Objekt ist ein Objekt, das erstellt wurde, bevor es in einen Ausführungskontext eintritt
Es gibt nur eine Kopie dieses Objekts und auf seine Eigenschaften kann überall im Programm zugegriffen werden. Der Lebenszyklus des globalen Objekts endet, sobald das Programm beendet wird.
In der anfänglichen Erstellungsphase des globalen Objekts werden Math, String, Date und parseInt als eigene Eigenschaften initialisiert, und andere Eigenschaften können ebenfalls als Eigenschaften erstellt werden (die auf das globale Objekt selbst verweisen können). Im DOM kann beispielsweise die Fenstereigenschaft des globalen Objekts auf das globale Objekt selbst verweisen.
Die Eingabe von „window“ in der Konsole ist also dasselbe wie „this.window“.

Beim Aufruf einer Funktion

foo();
Auch hier verweist dies auf das globale Objekt.

Beim Aufruf einer Methode

test.foo();

In diesem Beispiel zeigt dies auf das Testobjekt.

Beim Aufruf eines Konstruktors

new foo();

Wenn eine Funktion mit dem Schlüsselwort new aufgerufen wird, nennen wir sie einen Konstruktor. Zu diesem Zeitpunkt zeigt dies innerhalb der Funktion auf das neu erstellte Objekt.

Wenn explizit festgelegt

function foo(a, b, c) {}//

var bar = {};
foo.apply(bar, [1, 2, 3]); // array will expand to the below
foo.call(bar, 1, 2, 3); // results in a = 1, b = 2, c = 3

Bei Verwendung der Apply- und Call-Methoden von Function.prototype wird der Wert davon explizit als erster Parameter der Methode festgelegt.
Im Gegensatz zu den Regeln beim Aufruf einer Funktion bezieht sich dies im obigen Beispiel also auf bar.

Hier sind die Call- und Apply-Methoden:

Aufrufmethode :

Syntax: call([thisObj[,arg1[, arg2[, [,.argN]]]]])
Definition: Rufen Sie eine Methode eines Objekts auf, um das aktuelle Objekt durch ein anderes Objekt zu ersetzen.

Methode anwenden :

Syntax: apply([thisObj[,argArray]])
Definition: Wenden Sie eine Methode eines Objekts an, um das aktuelle Objekt durch ein anderes Objekt zu ersetzen.
Eine Sache, die wir hier beachten sollten, ist, dass, wenn ein Objekt wörtlich deklariert wird, dies nicht dazu verwendet werden kann, auf das Objekt selbst zu verweisen. Wie folgt:

var obj = {me: this}

Hier wird dies nicht auf obj verweisen, und die Anwendung ist auf die oben genannten fünf Situationen beschränkt.

Zusammenfassung

Obwohl die obige Situation die meiste Zeit sinnvoll ist, ist dies in der zweiten Situation (d. h. beim Aufrufen einer Funktion) tatsächlich selten nützlich und wird als ein weiterer Fehler im Javascript-Design angesehen.

Foo.method = function() {
  function test() {
    // this is set to the global object
  }
  test();
}

Nach dem, was wir oben gesagt haben, verweist dies hier auf das globale Objekt, nicht auf die Foo-Funktion.
Um im Test Zugriff auf Foo zu erhalten, müssen wir eine lokale Variable innerhalb der Methode erstellen, die auf Foo zeigt.

Foo.method = function() {
  var that = this;
  function test() {
    // Use that instead of this here
  }
  test();
}

Das ist nur ein normaler Variablenname, wird aber oft verwendet, um auf externe Variablen zu verweisen.
Es gibt noch einen weiteren interessanten Punkt im Zusammenhang mit Funktionsaliasen, nämlich beim Zuweisen einer Methode zu einer Variablen.

var test = someObject.methodTest;
test();

Im obigen Beispiel wird test als gewöhnliche Funktion behandelt, sodass im zweiten Fall (d. h. beim Aufrufen einer Funktion) ihr internes this auf die globale Variable statt auf someObject verweist.
Obwohl diese späte Bindung auf den ersten Blick wie eine schlechte Entscheidung erscheinen mag, ist sie tatsächlich die Grundlage für die Funktionsweise der prototypischen Vererbung.

function Foo() {}
Foo.prototype.method = function() {};

function Bar() {}
Bar.prototype = Foo.prototype;

new Bar().method();

Wenn die Methode zu diesem Zeitpunkt aufgerufen wird, zeigt sie auf das Instanzobjekt von Bar.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn