2012-12-24 3 views
-1

아래와 같은 네임 스페이스를 만들었습니다.데이터 멤버에 액세스

var Constants = { 
    Foo: 'bar', 
    SomeVar: { 
     key: 'value' 
    } 
}; 

는 내가하고 싶은 것입니다 :

var Constants = { 
    Foo: 'bar', 
    SomeVar: { 
     key: Constants.Foo + 'value' // Notice the Constants.Foo 
    } 
}; 

내가하고 싶은 것은 의 somevar에 대한 값을 만들 Constants.Foo의 값을 사용할 수 있습니다. 그러나 이것은 Firebug에서 오류를 발생시킵니다.

그래서 궁금 하군요, 어떻게 상수 네임 스페이스 내에서 푸의 가치에 액세스합니까; 또한, 나는 캡쳐에 관한 몇 가지 기사를 (예 : this과 같이) 읽었으며, Constants.Foo를하지 않아도 Foo의 값에 액세스 할 수 있습니까? 아마도 일종의 방법은 네임 스페이스의 참조를 보존하기 위해 키워드이고 다음은 thisParent.Foo과 같은 작업을 수행 할 수 있습니다.

감사합니다.


편집 :

TypeError: Constants is undefined

답변

0

수 없습니다 :

이 내가하는 방식으로지고있어 오류가 있습니다. 객체 글자은 사용자가 무언가에 할당하기 전까지는 이름이 없으며, 그때까지는 너무 늦었습니다. 객체 리터럴은 함수가 아니므로 사용할 수있는 문맥 키워드가 없습니다. this은 여전히 ​​그것이 포함 된 함수에 있던 것이 었습니다. 이후에 속성을 추가하는 것이 유일한 방법입니다.

var Constants = { 
    Foo: 'bar', 
    SomeVar: {} 
}; 

Constants.SomeVar.key = Constants.Foo + 'value'; 

아니요. 네임 스페이스는 JavaScript에서 아닙니다. 그것은 하나의 대상입니다. 아무것도 더.

+0

빠른 응답을 보내 주셔서 감사합니다. 고맙습니다. 이것은 물건을 명확하게하는 것을 도왔습니다! – ThePedestrian

0

할당이 실행될 때까지, 즉 개체가 생성 된 후에는 Constants이 존재하지 않는 문제가 있습니다. 다음과 같이 할 수 있습니다 (IIFE) :

var Constants = (function() { 
    self = { Foo : 'bar' }; 
    self.SomeVar = self.Foo + 'value'; 
    return self; 
}()); 
+0

'이'에 지정할 수 없습니다. – Ryan

+0

여전히 Constants.Foo를 수행 할 수 있습니까? 아니면 Constants()를 수행해야합니까? Foo? – ThePedestrian

+0

@minitech - 죄송합니다. 그것을 '자기'로 바꿨다. 너무 많은 자바. : –

관련 문제