【问题标题】:Access previous values within object during declaration [duplicate]在声明期间访问对象内的先前值[重复]
【发布时间】:2012-03-31 07:13:18
【问题描述】:

可能重复:
Self-references in object literal declarations

var obj = {
    value: 10,
    value2: value + 2
};

我该怎么做? (假设它甚至是可能的)

我正在使用很多 jQuery 的$.extend 来添加更多依赖于之前添加的值的属性;这样修改一些值会自动更正其余的值。

【问题讨论】:

标签: javascript jquery object accessibility self


【解决方案1】:

你不能在声明中这样做,但你总是可以创建一个函数。以下将始终返回比 value 中存储的值大 2 的值:

var obj = {
    value: 10,
    getValue2: function(){ return this.value + 2; }
};

如果您不希望 value2 的值随 value 一起改变,您可以声明一个占位符变量并使用它声明对象:

var placeholder = 10;

var obj = {
    value: placeholder,
    value2: placeholder + 2
};

【讨论】:

  • 在这个答案的基础上,您可以创建 value 和 value2 私有变量,并为 obj 提供一个通用的“get”函数。
  • 那应该是this.value 否则你会得到错误:'value' is undefined
  • @gilly3 - 意思是把它放在那里......错字。固定的。感谢您指出。
  • 应该指出的是,两者在功能上并不等同。在第一个示例中,初始化后,obj.value2obj.value 无关。但是,在您的解决方案中,当您增加 obj.value 时,obj.getValue2() 的结果也会增加。 jsfiddle.net/8zWNs
  • @gilly3 - 没错,但如果 OP 真的想要你所说的行为,那么在不引用先前值的情况下定义对象就很容易了。
【解决方案2】:

我不能 100% 确定您是否可以在声明时这样做。但是,您可以事后进行:

使用扩展:

var obj = {
    value: 10
};

$.extend(obj, {
    value2: obj.value + 2
});

http://jsfiddle.net/KgKgf/

只是 javascript:

var obj = {
    value: 10
};

obj.value2 = obj.value + 2;

http://jsfiddle.net/KgKgf/1/

【讨论】:

  • 天哪,为什么有人会使用.extend() 来为对象添加属性?太矫枉过正了!你的第二个例子是正确的,但第一个是......愚蠢的。
  • @gilly3 我同意这不是这项工作的合适工具,但 OP 提到他正在使用扩展来添加属性,所以我想我会展示一个使用扩展的示例。
  • 很公平......我错过了他问题中的那部分。
  • @gilly3 感谢您删除您的反对票:D
猜你喜欢
  • 1970-01-01
  • 2017-09-18
  • 2013-05-02
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多