molily: Eventhandling und Parameter

Beitrag lesen

button.onclick = this.bar.bindAsEventListener(this);

Das muss natürlich bar.bindAsEventListener heißen, schließlich ist es eine private Methode.

Die Frage, wie man am besten Daten an eine Handler-Funktion übergibt, kann man eigentlich nicht allgemein beantworten, weil es sehr auf die konkrete Anwendung ankommt, welche Methode die beste ist. Wie sieht also dein Originalcode aus, für was steht Foo, was macht bar und was hat es mit n auf sich? Kann bar als Methode von Foo gesehen werden?

Wenn bar unbedingt eine globale Funktion bleiben soll (warum auch immer - objektorientiert und lose globale Funktionen gemischt erscheint erst einmal unsauber), bieten sich andere Möglichkeiten an. Bei diesen Lösungen mit Closures ist es unwichtig, ob func eine private Methode ist oder global notiert wurde:

function Konstruktor (param) {  
 ...  
 elem.onclick = function closure () { func(param); };  
}

Wenn es denn unbedingt eine öffentliche Eigenschaft sein soll:

function Konstruktor (param) {  
 ...  
 this.eigenschaft = param;  
 var self = this;  
 elem.onclick = function closure () { func(self.param); };  
}

Der Name closure ist optional und hat keine Bedeutung/Wirkung, ich habe ihn hier lediglich zum Verständnis des Codes eingefügt. Es handelt sich weiterhin um eine als Function-Expression notierte anonyme Funktion.

Letzteres Beispiel zeigt zur Hälfte das, was auch bindAsEventListener() macht.

Mathias

--
»No nations, no borders.«
SELFHTML Weblog