2013-03-08 2 views
1

현재 값의 부모로부터 값을 액세스하려하지만 성공하지 못했습니다. 나는 내 문제를 보여주기 위해이 두 샘플 자바 스크립트 코드를 가지고 :개체를 선언하는 동안 속성에 액세스합니까?


1)

var x = { 
    y : { 
     a : "a", 
     ab : this.a + "b" 
    } 
}; 

을 console.log (X · Y)를;

> Object { 
    a : a, 
    ab : undefinedb 
} 

2)

var x = { 
    y : { 
     a : "a", 
     ab : x.y.a + "b" 
    } 
}; 

console.log(x.y); // Uncaught TypeError: Cannot read property 'y' of undefined 
+2

선언하는 개체 리터럴 내부에서 개체를 참조 할 수 없습니다 (개념적으로 * 아직 존재하지 않습니다 *). 두 단계로 수행하거나 함수와 지연된 평가를 사용해야합니다. –

답변

1

x.ythis들이 undefined있는 그 시점에서 정의되지 않은 있습니다. 내 말은 익명 객체를 만들면 닫을 때까지 실제로 존재하지 않는다는 것입니다. }.

그래서 다른 방법은 당신이 될 것 원하는 것을 달성하기 위해 :

var x = { 
    y : {a : "a"} 
} 

x.y.ab = x.y.a + "b" 

xy이 모두 초기화되고, 따라서 x.y.a이 설정되었습니다 후 ab 변수가 설정되는이 방법.

초기화하는 동안 실제로 x.y.ab을 설정하려면 함수와 클로저를 사용하여 공식적으로 수행해야합니다. 다음과 같은 것.

var x = function(){ 
    this.a = 'foo'; 
    this.b = this.a + ' bar'; 
}() // Immediate function call so I don't have to create it. 

console.log(x.b); // logs 'foo bar' 
2

리터럴을 사용하여, 당신은 그 변수를 정의하는 문이 실행될 수 없을 때까지.

하나의 좋은 방법이다 : 더 컴팩트하게

var x = {}; 

x.a = 'hey'; 

x.b = x.a + ' how you doing?'; 

alert(x.b); 

또는 :

var x = { 
    a: 'hey' 
}; 

x.b = x.a + ' how you doing?'; 

alert(x.b); 
관련 문제