2014-12-13 9 views
1

같은 개체 내의 다른 속성을 기준으로 개체 내에서 속성 값을 설정하는 방법이 있습니까? 예를 들어개체 내부의 다른 속성 값에서 속성 값 설정

:

var myObj = { 
    prop1 = 10, 
    prop2 = prop1 + 5 
}; 

alert(myObj.prop2); //Alerts 15 

또 다른 예를 들어 내가

var mainObj = { 
    obj1: {x: 100, y:100}, 
    obj2: {x: obj1+10, y: obj1+10} 
}; 

alert(mainObj.obj2.x); //Alerts 110 

나는 동일한 개체의 다른 속성을 기준으로 유지하기 위해 특정 속성을 원하는 aswell 객체 내에서 객체를 생성 할 때이 될 것입니다, 그래서 하나의 속성을 변경하면 다른 속성에도 영향을줍니다. 당신이 브라우저에 대한 backwards compatibility을 상관하지 않는 경우

+0

아니, 적어도 그렇게 좋아하지 않는 이유는 무엇입니까? – adeneo

+0

내 코드에서 일부 개체의 편집 속성을 더 쉽게 만들 수 있기 때문에 궁금합니다. – JimiiBee

+0

함수와 object.watch가 있습니다. 실제로 그 중 아무 것도 수행하지 않지만 아래와 같은 함수가 가장 쉽습니다. 속성을 추가하고 결과를 반환하지만, 실제로하는 것과는 완전히 다릅니다. – adeneo

답변

4

에만 ECMAScript를 3를 지원하는 기능

var obj = { 
 
    prop1:1, 
 
    prop2:function(){ 
 
    return this.prop1 + 1; 
 
    } 
 
}

+0

그리고 이것이 이것을 달성하는 유일한 방법인가? 함수를 사용하면 코드가 더 복잡해질 것 같습니다. – JimiiBee

+0

이 작업을 수행하는 가장 간단한 방법이 될 것입니다. obj.prop2()를 호출 할 때마다 obj.prop1의 현재 값과 관련된 값을 얻습니다. – Chop

+0

오 예. 감사 – JimiiBee

0

로 속성을 선언 할 수 있습니다, 당신은 use accessors (setters and getters)는 ECMAScript를 5에 등장 할 수

var myObj = Object.create(null, { 
    prop1: { 
    writable: true, 
    configurable: true, 
    value: 10 
    }, prop2: { 
    get: function() { 
     return this.prop1 + 5; 
    } 
    } 
}); 

myObj.prop1  // 10 
myObj.prop2  // 15 
myObj.prop1 = 20 // 20 
myObj.prop2  // 25 
myObj.prop2 = 6 // 6 
myObj.prop2  // 25 

Object.defineProperty() 메서드를 참조하십시오.이 메서드는 y 기존 객체에 접근자를 추가 할 수 있습니다.