Hallo molily,
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.
Ok, ein bisschen unsinnig scheint die Zuweisung zu sein, aber warum sollte man window.onload nicht undefined zuweisen? Zu diesem Zeitpunkt ist das anonyme Objekt ja bereits erzeugt und die Eventhandler sind an ihre DOM-Objekte gebunden (dank init()), ein späteres window.onload kann nicht mehr vorkommen, es sei denn, man lädt die Seite neu, aber dann geschieht ja wieder dasselbe: Das Objekt wird neu erzeugt und die Eventhandler zugewiesen.
Mit anderen Worten, der Code bedeutet nur: Wenn das Fenster fertig geladen ist (onload), soll eine Funktion ausgeführt werden, und zwar die init()-Methode des gerade erzeugten Objekts, wobei deren Rückgabewert (undefined) dann der window.onload-Handler wird. Den brauchen wir wie gesagt nachher auch nicht mehr. init() könnte auch pro forma null oder eine leere Funktion oder beliebige andere Funktion zurückgeben, wenn man meint, das zu brauchen.
> Und dann müsste es `window.onload = ({ ... }).init;`{:.language-javascript} sein, um keinen Syntaxfehler auszulösen.
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. Habe fast eine Woche daran herumgedoktert und ausgiebig getestet, bis es soweit war.
> 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?
Im anderen Fall kann man ein Objekt aber trotzdem mit `(function () { var obj = {... }; addLoadEvent(obj.init); })();`{:.language-javascript} kapseln.
Das mag sein. Vor kurzem gab es hier einen Thread über sowas wie "addLoadEvent", und das Einzige, was ich beim Überfliegen verstanden habe war, dass das Ganze recht kompliziert wird, wenn man es richtig machen will.
Was meinen Vorschlag hier angeht, dürfte es natürlich auch nicht einfach sein (oder gar unmöglich?), den onload-event dynamisch zu erweitern...
Ich muss zugeben, dass ich mir darüber noch keine Gedanken gemacht habe.
Gruß, Don P