【问题标题】:Setting property value from other property value inside object从对象内的其他属性值设置属性值
【发布时间】:2015-02-12 08:27:20
【问题描述】:

有没有一种方法可以相对于同一对象内的另一个属性设置对象内的属性值?

例如:

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

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

【问题讨论】:

  • 不是真的,至少不是那样,你为什么需要?
  • 我只是想知道,因为它会使我的代码更容易编辑某些对象的属性
  • 有函数和object.watch,它们都没有真正做你想做的事情,但是像下面这样的函数可能是最容易添加属性并返回结果的,但它完全与您正在做的事情不同。
  • 嗯,不,这种方式确实适用于我想要的,因为它确实从另一个属性定义了一个属性。这并不像我希望的那么简单

标签: javascript jquery object properties


【解决方案1】:

您可以将属性声明为函数

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

【讨论】:

  • 这是完成此任务的唯一方法吗?我觉得使用函数会让我的代码更复杂
  • 这将是完成此任务的最简单方法。每次调用 obj.prop2() 时,都会得到一个相对于当前 obj.prop1 的值
  • 哦,是的,有道理。谢谢
【解决方案2】:

如果您不关心 backwards compatibility 与仅支持 ECMAScript 3 的浏览器,您可以 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() 方法,该方法允许您向现有对象添加访问器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多