Unter globalem Umfang
Das;
Wenn Sie dies in einem globalen Bereich verwenden, weist es auf ein globales Objekt hin.
Hier ist eine detaillierte Einführung in das globale Objekt:
Das globale Objekt ist ein Objekt, das vor dem Eintritt in einen Ausführungskontext erstellt wurde.
Es gibt nur eine Kopie dieses Objekts, und auf seine Eigenschaften kann überall im Programm zugegriffen werden. Der Lebenszyklus des globalen Objekts endet in dem Moment, in dem das Programm ausgeht.
In der anfänglichen Erstellungsphase des globalen Objekts, Mathematik, String, Datum, ParseInt werden als seine eigenen Attribute usw. initialisiert, und andere zusätzliche Objekte können auch als Attribute erstellt werden (die auf das globale Objekt selbst hinweisen können). In der DOM kann beispielsweise die Fenstereigenschaft des globalen Objekts auf das globale Objekt selbst verweisen.
Es ist also dasselbe wie diese. Window in der Konsole.
Beim Aufrufen einer Funktion
foo ();
Hier weist dies auch auf das globale Objekt hin.
Wenn Sie eine Methode aufrufen
test.foo ();
In diesem Beispiel zeigt dies auf das Testobjekt.
Wenn Sie einen Konstruktor aufrufen
New Foo ();
Eine Funktion wird mit dem Keyword neu verwendet, wenn wir aufgerufen werden, das wir als Konstruktor nennen. Zu diesem Zeitpunkt zeigt dies innerhalb der Funktion auf das neu erstellte Objekt.
Wenn explizit eingestellt
Funktion foo (a, b, c) {} // var bar = {}; foo.apply (bar, [1, 2, 3]); // Array erweitert sich auf die unterefoo.call (Bar, 1, 2, 3); // führt zu a = 1, b = 2, c = 3Bei der Verwendung der Funktionen anwenden und aufrufen Funktionen der Funktion. Prototyp wird der Wert davon explizit auf den ersten Parameter der Methode festgelegt.
Im Gegensatz zu den Regeln beim Aufrufen einer Funktion zeigt dies im obigen Beispiel auf die Bar.
Hier sind die Anrufe und Anwendung von Methoden:
Anrufmethode :
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: anwenden ([thisobj [, argArray]])
Definition: Wenden Sie eine Methode eines bestimmten Objekts an und ersetzen Sie das aktuelle Objekt durch ein anderes Objekt.
Hier müssen wir beachten, dass dies nicht verwendet werden kann, um auf das Objekt selbst zu verweisen, wenn das Objekt buchstäblich deklariert wird. wie folgt:
var obj = {me: this}Hier wird dies nicht auf OBJ hinweisen, und die Anwendung davon ist auf die oben genannten fünf Situationen beschränkt.
Zusammenfassen
Obwohl die obige Situation größtenteils aussagekräftig ist, ist dies im zweiten Fall (d. H. Wenn man eine Funktion aufruft) tatsächlich selten nützlich ist, was als ein weiterer Fehler im JavaScript -Design angesehen wird.
Foo.method = function () {function test () {// Dies wird auf das globale Objekt} test ();} eingestelltWie oben erwähnt, wird dies hier auf das globale Objekt hinweisen, nicht auf die FOO -Funktion.
Um eine Möglichkeit zu erhalten, auf Foo im Test zu verweisen, müssen wir eine lokale Variable innerhalb der Methode erstellen, die auf Foo zeigt.
Foo.method = function () {var that = this; Funktion test () {// Verwenden Sie dies anstelle davon hier} test ();}Das ist nur ein normaler variabler Name, aber es wird oft verwendet, um auf dieses externe Hinweis zu zeigen.
Es gibt eine andere interessante Sache mit Funktion Alias, dh wenn eine Methode einer Variablen zugeordnet ist.
var test = einigeObject.methodtest; test ();
Im obigen Beispiel wird der Test als normale Funktion behandelt, sodass dies gemäß dem zweiten Fall (d. H. Wenn eine Funktion aufgerufen wird), zeigt dies im Inneren auf eine globale Variable, nicht auf einobjekt.
Obwohl diese verspätete Bindung zunächst eine schlechte Entscheidung erscheint, ist sie tatsächlich die Grundlage für die Prototyp -Vererbung.
Funktion foo () {} foo.prototype.method = function () {}; Funktion bar () {} bar.prototype = foo.Prototype; new bar (). method ();An diesem Punkt zeigt sie, wenn die Methode aufgerufen wird, auf das Instanzobjekt der Balken.