ChrisB: Parameter bei Event-handler

Beitrag lesen

Hi,

window.onload = { ... }.init();


>   
> > Du meintest wohl eher `window.onload = { ... }.init;`{:.language-javascript}, sonst ist die Zuweisung unsinnig.  
>   
> Eigentlich meine es schon genau so wie es dasteht, denn das gibt keinen Sytaxfehler, obwohl die init()-Funktion undefined zurückgibt.  
  
Natuerlich gibt das keinen Fehler - \*Sinn\* ergibt es aber auch keinen.  
  

> Ok, ein bisschen unsinnig scheint die Zuweisung zu sein, aber warum sollte  man window.onload nicht undefined zuweisen?  
  
Warum sollte man?  
Wenn man nicht auf das Eintreten des Events window.onload warten will, dann braucht man diesem Eventhandler auch nichts zuweisen.  
  

> Zu diesem Zeitpunkt ist das anonyme Objekt ja bereits erzeugt und die Eventhandler sind an ihre DOM-Objekte gebunden (dank init()),  
  
Da betreibst du reines Gluecksspiel - denn du greifst in init auf HTML-Objekte ueber getElementById zu. Die muessen aber (je nachdem, wo du das Script platzierst) noch gar nicht vorhanden sein.  
  

> Mit anderen Worten, der Code bedeutet nur: Wenn das Fenster fertig geladen ist (onload), soll eine Funktion ausgeführt werden,  
  
Das bedeutet er in der Form, die Mathias dir gezeigt hat.  
  
In deiner Form bedeutet er: Fuehre init \*sofort\* zu dem Zeitpunkt, wo du auf diese Anweisung triffst, aus, kuemmere dich dabei einen Furz darum, ob die HTML-Objekte, auf die zugegriffen werden soll, bereits vorhanden sind - und weise dann noch window.onload einen vollkommen ueberfluessigen Wert zu.  
  

> und zwar die init()-Methode des gerade erzeugten Objekts, wobei deren Rückgabewert (undefined) dann der window.onload-Handler wird.  
  
Das ist, wie gesagt, absolut sinnfrei.  
  

> Den brauchen wir wie gesagt nachher auch nicht mehr.  
  
Wenn du auf onload in keinster Weise reagieren willst, dann brauchst du dem Handler auch nichts zuweisen - deine "onload ist mir furzegal"-Attituede hat der Browser auch von selbst, wenn du onload nichts zuweist.  
  

> Das verstehe ich jetzt nicht ganz, habe es auch nicht überprüft, meinen Code dagegen schon, und der ergibt definitiv keinen Syntax- und keinen sonstigen Fehler und funktioniert genau wie gewollt, auch mit weit umfangreicheren Objekten und Eventhandlern.  
  
Nur, wenn es wirklich von dir gewollt ist, dass mit der Ausfuehrung \*nicht\* gewartet wird, bis das Dokument (und eingebundene Ressourcen) "fertig geladen" ist.  
  

> > Das völlige Verstecken macht natürlich solange Sinn, wie man ein Script mit einem onload-Handler hat.  
>   
> Was spricht dagegen, immer einen zu verwenden?  
  
Was spricht \*dafuer\*, eine Nicht-Aktion fuer Ereignis XY zuzuweisen, wenn man am Eintreten von Ereignis XY ueberhaupt kein Interesse zu zeigen beabsichtigt, und auch nichts davon abhaengig ausfuehren lassen moechte?  
  

> Was meinen Vorschlag hier angeht, dürfte es natürlich auch nicht einfach sein (oder gar unmöglich?), den onload-event dynamisch zu erweitern...  
  
Es waere ja nicht mal eine "Erweiterung", weil du bisher noch absolut nichts definiert hast, was bei onload geschehen sollte.  
  
  
  
Dir scheint der Unterschied zwischen  
window.onload = funktionsreferenz;  
und  
window.onload = funktionsaufruf();  
noch nicht klar zu sein.  
  
Die Klammern sind es, die hier den Unterschied machen, und zwar einen gewaltigen.  
  
MfG ChrisB