从对象内的其他属性值设置属性值

时间:2014-12-13 21:24:08

标签: javascript jquery object properties

有没有办法在对象中设置属性的值相对于同一对象中的另一个属性?

例如:

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

我希望某些属性保持相对于同一对象中的其他属性,这样当我更改一个属性时,它将影响另一个属性。

2 个答案:

答案 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()方法,该方法允许您向现有对象添加访问者。