mrjerk: Zugriff von Objektmethode auf Objekteigenschaft

Beitrag lesen

Hallo,
Ich vermute Dein Problem liegt hier:

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

Dies übergibt zwar das Funktionsobjekt "this.myFunction" - aber eben nur das Funktionsobjekt. Wenn der Listener ausgeführt wird, kennt dieser die Referenz auf "this" nicht mehr:

MyObject.prototype.myFunction = function (){
alert(this.Parameter);
};

"this" bezieht sich hier nicht mehr auf die Instanz von MyObject (sondern vermutlich auf GEvent)!

Eine Mögliche Lösung: Du übergibst die aktuelle Instanz als Variable, um den Scope so in den Listener "herrüber zu retten".

  
  
function MyObject (){  
  
        this.Parameter=5;  
        this.Marker = new GMarker(new GLatLng(0,0));  
  
        GEvent.addListener(this.Marker, 'click',  
           this.myFunction(this));  
        Map.addOverlay(this.Marker);  
  
}  
  
MyObject.prototype.myFunction = function (instance){  
                alert(instance.Parameter);  
};  
  

Eine andere Möglichkeit:

  
function MyObject (){  
  
        this.Parameter=5;  
        this.Marker = new GMarker(new GLatLng(0,0));  
  
        var scope = this;  
        var listener = function () {scope.myFunction();};  
  
        GEvent.addListener(this.Marker, 'click', listener);  
        Map.addOverlay(this.Marker);  
  
}  
  
  
MyObject.prototype.myFunction = function (){  
                alert(this.Parameter);  
};  
  

(ohne Gewähr ;) )

Hope that helps.

Viele Grüße,

Jörg