2012-08-29 17 views
5

Mam zagnieżdżonego obiektu w JavaScript jak ten:JavaScript dostępu do obiektów zagnieżdżonych poziom korzeń

{ 
nameRoot: "my object", 
sub: { 
    nameSub: "my sub object" 
} 
} 

Chcę uzyskać dostęp nameRoot z funkcji określonej w sub.

Korzystanie z funkcji I byłby zdefiniowany coś takiego:

var self = this; 

i używane, ale jak ja mogę zrobić to w dosłownym obiektu?

+0

Nie wierzę, że możesz. Nie znam postu z mojej głowy, ale pamiętam, że ostatnio czytałem to na StackOverflow. Czy potrafisz zdefiniować ten obiekt jako funkcję zamiast literału obiektowego? – Brad

+2

Nie możesz. Ale obiekt nie jest bez odniesienia, więc gdzieś musisz mieć odniesienie do obiektu, w którym się znajdujesz, nie? – David

+1

Jest to również powód, dla którego węzły i takie muszą mieć wyraźne odwołanie z powrotem do "parentNode". – voithos

Odpowiedz

1

Poniższy kod umożliwia połączenie z elementem nadrzędnym i uniknięcie wyświetlania elementu nadrzędnego w pętli for-in.

var parent = { a: 1 }; 
var child = { b: 2 }; 

Object.defineProperty(
    child, 'parent', 
    { value: parent, 
     enumerable: false } 
); 

parent.child = child; 

child.performAction = function() { 
    console.log(this.parent.a) // 1 
} 
0

Najlepszym sposobem, aby to zrobić, jest zakres funkcji.

function myFunc(){ 
    this.nameRoot = "my object"; 
} 

następnie można zrobić coś takiego:

var func = new myFunc(); 
func.sub = new myFunc(); 
func.sub.nameRoot = "my sub object"; 

Oczywiście są mądrzejsze sposoby aby to zrobić (na przykład podać nazwę przez params funkcji), ale jest to ogólny wzór.

+0

Pytanie: _ ale jak mogę to zrobić w "obiekcie literalnym" _ –

+0

Nie możesz, dlatego kazałem zrobić to tak, jak sugerowałem. – Paul

Powiązane problemy