Camping_RIDER: Funktionen in Objekten

Beitrag lesen

Huhu ;)

obj = {

arr: [],
  init: (function() { for (var i = 0; i < 11; i++) obj.arr.push(i); alert(obj.arr.join(' ')); })()
}


> Ich bekomme aber eine Fehlermeldung: "ReferenceError: obj is not defined".  
> Was habe ich falsch gemacht?  
  
Für mich sieht das nach Syntax-Problem aus ;)  
  
Und zwar liegt's konkret an der Funktion, richtig wäre  
  
~~~javascript
var obj = {  
  arr: [],  
  init: function() { for (var i = 0; i < 11; i++) obj.arr.push(i); alert(obj.arr.join(' ')); }  
}

Das "var" vor "obj" hab ich auch mal mit eingefügt; ich schätze mal, dass das bei dir auch noch fehlt - auch wenn das kein unbedingter Grund des Scheiterns ist. Solltest du obj an anderer Stelle schon definiert haben, kannst das "var" einfach weglassen.

Die Schreibweise (function() {...})(); wird dazu genutzt, um eine Funktion direkt nach Definition aufzurufen. Innerhalb eines Objekts wird eine Funktionsdefinition aber genutzt, um die Funktion innerhalb des Objekts abzuspeichern (in deinem Fall als obj.init). Diese beiden Anwendungen vertragen sich also nicht wirklich - zumindest wäre mir das neu.

Was du vielleicht gesucht hast, ist die Möglichkeit, direkt nach Definition des Objekts eine Funktion auszulösen - das wäre dann aber sinnvollerweise der Konstruktor und der macht nur dann Sinn, wenn dein Objekt nicht nur ein statisches Objekt ist, sondern falls daraus Elemente über "new" abgeleitet werden sollen.

Solltest du wirklich nur statisch das "obj" definieren und dann direkt die Methode "obj.init" aufrufen wollen, würde ich dir einfacherweise folgendes empfehlen:

var obj = {  
  arr: [],  
  init: function() { for (var i = 0; i < 11; i++) obj.arr.push(i); alert(obj.arr.join(' ')); }  
}  
obj.init();  

Grüße,

RIDER

--
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:[