2011-03-13 18 views

Odpowiedz

9

W sposób w jaki to określasz - nie.

Trzeba budowę dwóch etapach, to będzie działać:

var outer = { x : 0 }; 
// outer is constructed at this point. 
outer.inner = { 
     b : outer.x + 1 // 'outer' is defined here. 
}; 
4

Nie w konstrukcji, którą tam masz, nie.

Głównym powodem jest to, że outer jeszcze nie istnieje, gdy jesteś w środku inner.

Jeśli zmieniono właściwości inner na funkcje, które można uzyskać pod outer w środowisku wykonawczym, ale byłby to dość paskudny kod.

Rozważ użycie new outer(); zamiast i zbudować obiekt, który drogę, a następnie można użyć this wewnątrz inner, ale to jest to zupełnie inna konstrukcja i będzie wyglądać

var outer = function() { 
    this.x = 0; 
    this.inner = { 
     a: this.x + 1 
    };      
}; 

var b = new outer(); 

console.log(b.inner.a); // 1 
0

nie sądzę, że sortowania Konstrukcja miałaby sens. Nie sądzę, aby cokolwiek mogło powstrzymać Cię od stwierdzenia, że ​​w tym scenariuszu można odróżnić oboje rodziców?

Sposób wykonania jest prawdopodobnie związany z większą liczbą funkcji typu konstruktora, z parametrem przypisanym do outer.x i inner.whatever w razie potrzeby.

0

Można również użyć Zamknięcie:

var outer = function outer() { 

    var x = 0; 

    return { 
     inner : { 
      a: x + 1 
      } 
     }     
}; 

var b = outer(); 
console.log('a is ' + b.inner.a); 
//a is 1 

Na dobry artykuł na temat zamykania sprawdzić javascript ogród

http://bonsaiden.github.com/JavaScript-Garden/#closures

Powiązane problemy