Aloha
Das hat auch soweit funktioniert... So dachte ich, dass ich auch (wie oben) einen flotten Einzeiler machen kann.
Dass das Beispiel funktioniert, ist auch klar. Was dabei passiert ist, dass eine statische Funktion (die von keiner Variable abhängt) aufgerufen wird und deren Rückgabewert in obj.init gespeichert wird (warum auch immer das sinnvoll sein soll).
Im anderen Fall notierst du innerhalb einer Objektdefinition eine sofort aufzurufende Funktion, die wiederum auf Eigenschaften desselben Objekts zugreifen soll. Wenn die Funktion direkt nach Definition ausgelöst werden soll, wie soll sie dann auf obj.arr zugreifen, wenn obj noch nichtmal vollständig definiert ist? Denn zu obj gehört ja wieder der Rückgabewert der Funktion, der in obj.init gespeichert werden soll, die aber wiederum auf obj.arr zugreift, was ... -> ich schätze du siehst was ich meine. Das KANN gar nix anderes geben als "obj is not defined".
Ich verstehe immer noch nicht genau, was die Notation mit
var obj = { ...
init:(function(){})()
}
sinnvollerweise bewirken soll. Die Funktion wird dadurch nicht gespeichert (sie wird ja sofort ausgeführt), sondern nur ihr Rückgabewert (der nicht existiert) ... So what??
Wenn du unbedingt nen schicken Einzeiler willst, dann doch eher so:
var obj = {
arr : []
}
(function(){...})();
d.h. den Funktionsaufruf raus aus dem Objekt - denn den nicht vorhandenen Rückgabewert speichern zu wollen ist ja sowieso murks. Dadurch vermeidest du auch konsequent jeden "obj not defined"-Fehler ;)
Grüße,
RIDER
P.S.: Ob Einzeiler immer so "schick" sind, da bin ich mir nicht so sicher. Für mich erschweren Einzeiler die Lesbarkeit und das Debuggen des Codes. Es kann Gebiete geben, in denen der Einsatz von Einzeilern sehr sinnvoll ist - nämlich z.B. bei einem Skript was über ein Lesezeichen aufgerufen werden soll. Im Standard-Einsatzgebiet von Javascript (eingebunden auf einer Homepage) erschließt sich mir der Nutzen von Einzeilern grundsätzlich eher nicht. Das ist aber vielleicht auch einfach eine Glaubensfrage, über die man bekanntlich nicht diskutiert ;)
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[