Zugreifen auf Objektliteraleigenschaften über interne Rückrufe (asynchrone Methoden)

8

Ich schreibe eine Chrome-Erweiterung, die mit einem Teilbaum von Lesezeichen interagieren muss. Es gibt eine Menge Interaktionen mit diesem Teilbaum, also abstrahiere ich diese Logik in ein Objektliteral, etwa so:

%Vor%

So weit, so gut.

Das Problem, das ich habe, wird durch die asynchronen Chrome-APIs verursacht (und mein Fehlen von JS-fu). Um zu sagen:

%Vor%

Meine Frage ist:

Wie gehe ich in den verschiedenen Callbacks für die Chrome-API-Methode auf die Mitglieder des umschließenden Objektliterals ein?

Ich habe mir das Modulmuster angesehen, aber es scheint die Dinge nicht zu ändern, und es ist nicht so, dass dieser Code von irgendetwas außerhalb der Erweiterung verbraucht wird.

    
Idan Gazit 08.11.2011, 09:25
quelle

2 Antworten

9

Sie müssen einen Verweis auf this speichern, der auf das Objekt contextStore zeigt;

%Vor%

Dies ist äquivalent zu tun;

%Vor%

Sie haben jedoch den Vorteil, dass Sie contextStore nicht überall wiederverwenden.

    
Matt 08.11.2011, 09:27
quelle
1

Das Schlüsselwort this kann abhängig davon, wie Sie es aufrufen, an verschiedene Dinge gebunden sein. Ich bin kein Javascript-Experte, aber es gibt eine gute Erklärung bei A List Apart .

Die Lösung besteht darin, explizit zu binden, wenn die Funktion entweder mit my_function.apply(obj, [args]) , my_function.call(obj, args) (jetzt aufrufen) aufgerufen wird oder die Funktion für den späteren Aufruf vorbindet: my_function.bind(obj) .

Als Python-Programmierer macht es Ihnen offensichtlich Freude, wenn Sie explizit sind: -)

Matts Antwort ist schließlich der bessere Ansatz, da er noch expliziter, prägnanter ist und nicht erfordert, dass die Funktion in einer bestimmten Weise aufgerufen oder vorbereitet wird. Ich dachte nur, ich würde versuchen zu erklären, was vor sich geht.

    
Will Hardy 08.11.2011 09:40
quelle