Struppi: Irren ist menschlich

Beitrag lesen

Ähem... kann es sein dass du dich jetzt irrst? Aufgedröselt ist es doch so:

Seltsam aber wahr ;-)
Ich meine mich zu erinnern, das mir Notepad++ falsche Klammmerpaare angezeigt hat, aber vielleicht hatte ich da schon am Code rumkopiert.

Ich widerspreche inzwischen nur noch sehr ungern, aber das ist doch wirklich der Beweis.

JaJa, du hast recht.

var myHandler = function() {

/* tu viele Dinge, wenn die Funktion aufgerufen wird * /
};

object.onevent = myHandler;


>   
> Das ist im Prinzip klar, aber wenn myHandler eine Methode irgend eines Objekts ist, dann hat sie, wenn der Event eintritt nicht ohne weiteres Zugriff auf die andere Eigenschaften und Methoden des Objekts, dessen Methode sie ist (this in myHandler ist ja üblicherweise das Objekt, das den Event ausgelöst hat, soviel ich weiß).  
  
Du meinst sowas:  
~~~javascript
var myHandler = {  
 attribut_1: 'attribut_1',  
 attribut_2: 'attribut_2',  
 methode: function() {  
  alert(this.attribut_1);  
 }  
};  
window.onload = myHandler.methode;  

Das ist so auch nicht wirklich lösbar. Deshalb musst du um den Event eine Wrapper Funktion bauen.

window.onload = function() { myHandler.methode();};

Deshalb will ich über window.onload (also erst wenn alle DOM-Elemente existieren) sämtliche Eventhandler an ihre DOM-Elemente binden und zwar so, dass die Handler immer Zugriff auf die Eigenschaften und Methoden des Objekts haben (quasi an Stelle von Parametern), in dem die Handler definiert sind.

Das ist genau der Weg, das Problem an deinem ursprünglichen Code war, das du erst ein Objekt erzeugt hast. Und beim erzeugen schon versucht hast auf das unfertige DOM zu zugreifen. Das geht nicht.

Das Problem mit der gewünschten Kapselung erreichst du aber nicht anders.

(function() {

/* Diese Funktion wird sofort aufgerufen */
})()


>   
> Das ist doch fast genau das, was ich oben mache, nur dass ich nicht "Diese Funktion" sofort aufrufe, sondern die Methode init "Dieses Objekts".  
  
Stimmt, das hatte ich übersehen, da du Versionen hattest wo es nicht so war.  
  
Struppi.