Javascript Objekte, die Funktion von sich selbst aufrufen

8

Ich habe Game Design mit HTML5 und JavaScript gelesen und mich in Objekte eingeführt. Nachdem ich das Buch gelesen und an den Projekten gearbeitet hatte, beschloss ich, dieses neu gewonnene Wissen zu nutzen und Objekte in meine eigenen Projekte zu integrieren. Also, hier ist meine Frage können oder sollten Objekte ihre eigenen Funktionen aufrufen? Zum Beispiel:

%Vor%

Das Buch zeigte ein Beispiel mit einem Timer, der dies tut:

%Vor%

In dem Beispiel mit dem Timer-Objekt wird ein Verweis auf self gemacht, um die interne Funktion aufzurufen, also muss ich selbst verwenden, um interne Funktionen aufzurufen, oder ist dies der richtige Weg, dies mit Objekten zu tun? Oder beste Praktiken? Vielen Dank im Voraus.

%Vor%     
CodeEngie 30.05.2013, 16:25
quelle

4 Antworten

5

JavaScript-Namen sind lexikalisch begrenzt . Wenn also ein Name (eine Variable) in einem Skript gefunden wird, muss die JavaScript-Laufzeitumgebung verwendet werden Suchen Sie nach den Bereichen, in denen die Funktion definiert wurde.

Zum Zeitpunkt der Definition, diese Funktion:

%Vor%

hat in seinem äußeren Bereich keinen Zugriff auf eine check -Funktion. % Co_de% zu deklarieren und an self zu binden ist eine Technik, die verwendet wird, um die (etwas interessanten) Feinheiten des Verweisens zu behandeln zum aktuellen Objekt in JavaScript (weil der Beispielcode this verwendet).

Um auf eine Funktion im aktuellen Objekt zu verweisen, reicht es aus, window.setInterval zu verwenden.

%Vor%     
voithos 30.05.2013, 16:33
quelle
1

Der Punkt, an dem eine Variable wie "self" deklariert und initialisiert wird, ist die Tatsache, dass der Wert von this bei jedem Funktionsaufruf neu bestimmt wird. Wenn eine Funktion in eine andere Funktion geschachtelt ist und diese innere Funktion Zugriff auf den Wert von this aus dem äußeren Kontext benötigt, muss this in einer anderen Variablen - in Ihrem Fall "self" - beibehalten werden. (Der Name dieser Variablen ist natürlich unwichtig.)

In Ihrem Beispielcode:

%Vor%

Diese Funktion, die an setInterval() übergeben wurde, muss den Wert von this von der Funktion "start" verwenden. Wenn diese Intervall-Timer-Funktion aufgerufen wird, wird this jedoch auf etwas anderes gesetzt (entweder der globale Kontext oder null im "strikten" Modus). Indem der Wert von this in dem Kontext gespeichert wird, in dem diese Intervallzeitgeberfunktion instanziiert ist, kann sein Code ihn verwenden, um auf das Zeitgeberobjekt zuzugreifen.

In Ihrem zweiten Beispiel tut das Deklarieren und Initialisieren einer "self" -Variablen nichts schaden, aber es ist unnötig. Manchmal ist es jedoch praktisch, nur um den Code zu verdeutlichen, obwohl natürlich ein aussagekräftigerer Name als "Selbst" eine gute Idee wäre.

    
Pointy 30.05.2013 16:30
quelle
1

Es ist Javascript Funktionskontext, jedes Mal, wenn Sie eine Funktion erstellen, erstellen Sie einen neuen Kontext (Bereich).

In setInterval() function erstellen Sie einen neuen Bereich, also verweist this nicht länger auf das gleiche this oben:

%Vor%

Sie können den richtigen Kontext Ihrer Funktion auch manuell mit % verknüpfen. co_de% (damit du bind() nicht mehr brauchst):

%Vor%

Weitere Informationen:

julesbou 30.05.2013 16:34
quelle
0

Natürlich kann und sollte ein Objekt seine eigenen Funktionen aufrufen, dies ist die einzige Möglichkeit, OOP in Javascript zu emulieren. Ich würde sagen, dass die Praxis, die das Buch verwendet, self = this ist schlecht, da this nur für sich selbst verwendet werden kann, aber im ersten Beispiel wird es verwendet, um den Wert von diesem beizubehalten, der sonst this wäre der Funktion selbst nicht die äußere Klasse

    
aaronman 30.05.2013 16:28
quelle