有没有办法在对象中设置属性的值相对于同一对象中的另一个属性?
例如:
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
我希望某些属性保持相对于同一对象中的其他属性,这样当我更改一个属性时,它将影响另一个属性。
答案 0 :(得分:4)
您可以将属性声明为函数
var obj = {
prop1:1,
prop2:function(){
return this.prop1 + 1;
}
}

答案 1 :(得分:0)
如果您不关心backwards compatibility只支持ECMAScript 3的浏览器,您可以在ECMAScript 5中使用use accessors (setters and getters):
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()
方法,该方法允许您向现有对象添加访问者。