Ralf: Funktionen in Objekten

Beitrag lesen

Hallo

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".  
  
Die Ausführungsreihenfolge ist anders als du erwartest. Der JavaScript-Interpreter führt die Funktion aus, bevor das erzeugte Objekt der Variable obj zugewiesen wurde.  
  
Er muss erst die Funktion ausführen, bevor er das Objekt mit allen Eigenschaften erzeugen und der Variable zuweisen kann. Also kannst du in der Funktion nicht auf obj verweisen.  
  
Was hier genau abläuft:  
  
1\. Der Interpreter sieht einen Objektliteral { eigenschaft1: wert1, eigenschaft2: wert2 usw. }  
2\. Alle Ausdrücke auf Seiten der Werte werden nacheinander berechnet/aufgelöst  
3\. Das Objekt wird erzeugt und die Werte den Eigenschaften zugewiesen  
4\. Das Objekt wird weiter verarbeitet in dem Ausdruck, in dem es vorkommt. Hier kommt es in einer Variablenzuweisung vor var obj = {};, also wird eine Variable “obj” angelegt, die auf das Objekt zeigt  
  
Schreib es also ganz konservativ:  
  
~~~javascript
var obj = {  
  arr: [],  
  init: function() { was auch immer }  
};  
obj.init();

grüße
Ralf