molily: Instanz anprechen in einer Methode, die als Handler fungiert

Beitrag lesen

Hallo,

PS: parameterübergabe über die Funktion mit var bla = this möchte ich vermeiden - es gibt doch bestimmt eine saubere lösung dazu.

Deine Frage ist identisch mit der, die du in https://forum.selfhtml.org/?t=134586&m=873078 gestellt hast. Die Lösung, die dir da gegeben wurde, ist m.M.n. bereits die sauberste Lösung.

function Cselector () {  
   var thisObj = this;  
   ...  
   this.updateOptions = function (eventobjekt) {  
      alert(this); // zeigt auf der Elementobjekt, bei dem der Handler registriert wurde  
      alert(thisObj); // Zeigt immer auf die Cselector-Instanz  
   };  
   ...  
   field.onchange = this.updateOptions;  
}

Die Technik dahinter sind wie gesagt Closures. Um die kommst du nur durch eine Möglichkeit herum: Du speicherst eine Referenz auf die Cselector-Instanz am select-Elementobjekt. Im Handler kannst du dann über this auf diese Referenz zugreifen und bekommst die Cselector-Instanz:

function Cselector () {  
   this.updateOptions = function (eventobjekt) {  
      alert(this.correspondingCselector);  
      this.correspondingCselector.getOptions('user.xml'); // usw.  
   };  
   ...  
   field.correspondingCselector = this;  
   field.onchange = this.updateOptions;  
}

Eine dritte Möglichkeit gibt es meines Wissens nicht.

Mathias