molily: Zugriff von Objektmethode auf Objekteigenschaft

Beitrag lesen

Hi,

GEvent.addListener(this.Marker, 'click',
           this.myFunction(this));

Das führt die Funktion aus und übergibt den Rückgabewert an addListener. Der Rückgabewert ist aber keine Funktion, sondern in diesem Fall undefined.

var listener = function () {scope.myFunction();};

Eine Closure anzulegen ist letztlich der richtige Weg, am besten macht man das mit einer Binding-Helferfunktion, sodass man schreiben kann:

GEvent.addListener(this.Marker, 'click', this.myFunction.bind(this));

Das erzeugt genau wie oben eine Closure, die eine Referenz auf das Instanzobjekt einschließt und dann den tatsächlichen Handler im Kontext dessen aufruft (mit call() bzw. apply()).

Übrigens ist Scope der falsche Begriff für das, worauf this zeigt. Der richtige Begriff ist Kontext (context). Der Scope spielt bei der Identifier Resolution eine Rolle. Das ist nochmal etwas anderes.

Mathias