2014-07-24 5 views
1

내 사이트 중 하나에 대한 상수 파일을 설정하려고합니다. 필요한 경우 문자열 상수를 얻을 수 있도록 설정하려고합니다. 지금까지JavaScript 내의 객체 내의 객체

var Constants = new SiteConstants(); 

function SiteConstants() 
{ 
    this.Training = function Training() 
    { 
     this.Staff = function Staff() 
     { 
      this.fetch = "someurl"; 
     } 
    } 
} 

console.log(Constants.Training().Staff().fetch); //Fail - what i want to call 
//or something similar like Constants.Training.Staff.fetch 
console.log((new Constants.Staff()).fetch); //Success 

이 자바 스크립트로 가능하고,하지 않을 경우, 누군가가 대안을 제안 할 수 있습니다 (종류 C#을 틱의 작동하지 않음)이 무엇

?

+0

을 그들이 생성자'(새 (새 Constants.Training()) 때문에 직원.()). fetch' – huocp

+1

상수 _per se_가 자바 스크립트에 존재하지 않습니다. 다른 객체에 객체를 만들려고한다면 객체 리터럴 표기법과 할당을 적절히 사용하십시오. –

+0

@ K.Hallman 당신이 옳다면,'const' 키워드 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const)가 있습니다. 그러나 나는 제안하지 않을 것입니다. 아직 널리 지원되지 않기 때문에. 그리고 OP가 "상수"와 객체 리터럴에 의해 의미하는 것이 꽤 분명하다고 생각합니다. – Ian

답변

4

이 목적을 위해 함수 대신 개체를 사용해야합니다.

var Constants = { 
    Training: { 
     Staff: { 
      fetch: "someurl" 
     } 
    } 
}; 
1

Training을 생성자로 정의하고 있지만 실제로는 호출하지 않습니다. 원하는 내용은 다음과 같습니다.

function SiteConstants() 
{ 
    var Training = function Training() //constructor 
    { 
     this.Staff = function Staff() 
     { 
      this.fetch = "someurl"; 
     } 
    } 
    this.Training = new Training(); 
} 

등등.

2

각 생성자를 올바르게 정의하십시오.

function SiteConstants() 
{ 
    this.training = new Training(); 
} 

function Training() 
{ 
    this.staff = new Staff(); 
} 

function Staff() 
{ 
    this.fetch = "someurl"; 
} 

또는 당신은 또한 이런 식으로 작업을 수행 할 수 있습니다

function SiteConstants() 
{ 
    function Training() 
    { 
     function Staff() 
     { 
      this.fetch = "someurl"; 
     } 

     this.Staff = new Staff(); 
    } 

    this.Training = new Training(); 
} 
+0

충돌하는 객체가 없도록 동봉해야했습니다 (우리 사이트에는 많은 자바 스크립트 객체가 있습니다) – JosephGarrone

1

는이

var Obj = new Constants.Training(); 

같은 새로운 객체를 생성해야 다음 함수 직원 및 console.log를 호출해야 Obj.fetch

Obj.Staff(); 
console.log(Obj.fetch); 

또는이 작업을 수행 할 수 있습니다.

function SiteConstants() 
{ 
    this.Training = function Training() 
    { 
     this.Staff = function Staff() 
     { 
      this.fetch = "someurl"; 
     } 
    } 
} 
var Constants = new SiteConstants(); 
Constants.Training = new Constants.Training(); 
Constants.Training.Staff(); 
console.log(Constants.Training.fetch); 
2

완전히 다른 접근 방식을 제안합니다. 자바 스크립트에 더 관용적 인 것 : JSON. 당신이 var constantsObject에 부착이 객체가있는 경우

{ 
    "siteConstants" : { 
     "training" : { 
      "staff" : { 
       "fetch" : "someurl" 
      } 
     } 
    } 
} 

그런 다음, 당신은 같은 상수에 액세스 할 수 있습니다

constantsObject.siteConstants.training.staff.fetch; // returns "someurl" 
constantsObject["siteConstants"]["training"]["staff"]["fetch"] // returns "someurl" 
+0

JavaScript에는 "JSON"유형이 없습니다. 다른 답이 이미 제공되어있는 객체 리터럴을 작성 중입니다. – Ian

+0

@Ian 필자는이 유형을 결코 호출하지 않았습니다. 나는 "접근법"이라고 말했다. – royhowie

+0

JSON을 여기에서 참조해야하는 이유는 여전히 없습니다.JSON은 데이터 전송 형식이며 JavaScript와는 아무런 관련이 없습니다 (JS 객체에서 파생 된 것 외). – Ian

관련 문제