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%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.
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.
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:
Sie können den richtigen Kontext Ihrer Funktion auch manuell mit % verknüpfen. co_de% (damit du bind()
nicht mehr brauchst):
Weitere Informationen:
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
Tags und Links javascript function object prototype