Verweis auf "this" in einem Parent-Closure in Javascript

8

Ich möchte das in Javascript machen:

%Vor%

Dies kann auf folgende Weise erreicht werden:

%Vor%

Gibt es einen besseren Weg?

    
Jonathan Swinney 26.10.2010, 00:57
quelle

3 Antworten

6

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:

%Vor%

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 :

%Vor%

Und für Z :

%Vor%

Sie können es testen hier .

    
Nick Craver 26.10.2010, 01:01
quelle
1

Sie können alternativ

verwenden %Vor%     
BrunoLM 26.10.2010 02:11
quelle
1

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:

%Vor%

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).

    
Lee 26.10.2010 01:36
quelle

Tags und Links