Ich möchte das in Javascript machen:
%Vor%Dies kann auf folgende Weise erreicht werden:
%Vor%Gibt es einen besseren Weg?
einen Verweis auf den übergeordneten halten (wie Sie) einen guten Ansatz ist jedoch für Ihr spezielles Beispiel gibt es keine Notwendigkeit für den anonymen Wrapper, können Sie die Funktion direkt übergeben, wie folgen aus:
%Vor% Sie können es hier testen, und ohne diese Wrapper gibt es eigentlich keine Notwendigkeit für die self
variabel, können Sie Verwenden Sie einfach this
direkt, wie folgt:
Sie können diese Version testen hier .
Da es scheint unten einige Verwirrung in den Kommentaren zu sein, der obige Code unterhält this
für die Frage , wenn Sie wollen auch die this
/ Kontext innerhalb der Rückruf zu halten, verwenden .call()
wie folgt :
Und für Z
:
Es gibt ein Muster, das oft "Delegate" genannt wird, das dieses Problem angeht.
In JavaScript sieht eine nicht allzu ausgefallene Implementierung etwa so aus:
%Vor%In Ihrem Beispiel würden Sie es wie folgt verwenden:
%Vor%Sie könnten auch Funktionen schreiben, die einen Delegierten erwarten:
%Vor%, dann wird in A
Ihr Impl von b
zu:
Das Delegate
bietet nur eine einfache, konsistente Möglichkeit, die this
-Referenz (die Sie self
genannt haben) innerhalb einer Objektinstanz zu kapseln, die wie jede andere Objektinstanz behandelt werden kann. Es ist besser lesbar und Sie müssen Ihren Funktionsumfang nicht mit überflüssigen Variablen wie self
verschmutzen. Eine feinere Delegat-Implementierung könnte ihre eigenen Methoden und andere verwandte Zustände haben. Es ist auch möglich, den Delegaten so zu erstellen, dass er einige speicherbezogene Speicherverwaltungsprobleme minimiert (obwohl der Code, den ich hier gezeigt habe, definitiv kein Beispiel dafür ist).
Tags und Links javascript closures this