【问题标题】:JavaScript: Can I define a property of an object using another property belonging to the same object using literal notation? [duplicate]JavaScript:我可以使用文字表示法使用属于同一对象的另一个属性来定义对象的属性吗? [复制]
【发布时间】:2012-02-26 19:43:17
【问题描述】:

可能重复:
Passing in dynamic key:value pairs to an object literal?
Javascript Object Literal referring to another property in itself from another property

var var1 = {};

var1.number = 20;
var1.numberplus3 = var1.number + 3;
console.log(var1.numberplus3);

var var2 = {
    number: 20,
    numberplus3: number + 3
};
console.log(var2);

在此示例中,var1.numberplus3 的计算结果为 23,但 var2.numberplus3 的计算结果为“未定义”。这是为什么呢?

(我在 Codecademy 使用 JS 解释器:http://labs.codecademy.com/#:workspace

谢谢!

【问题讨论】:

  • @Tomasz:这有点不同......在这种情况下,它是另一个对象的属性。 编辑: 哦,我错了……应该看过标题……代码让我感到困惑,抱歉。
  • @kinakuta:var2.numberthis.number 都不起作用。 var2 不起作用,因为在那一刻,var2 尚未定义。 this 将指代代码运行位置的上下文(很可能是 windwow),但 100% 不是 var2
  • 糟糕。是的,我的意思是写 numberplus3 = var2.number + 3!这就是我实际上试图运行的!

标签: javascript object properties literals notation


【解决方案1】:

你应该这样写:

var var2 = {
    number: 20,
    numberplus3: function() { return var2.number + 3; }
}

或:

var var2 = {
    number: 20
};
// at this point the var2 object is defined and accessible in the memory
var2.numberplus2 = var2.number+3;

【讨论】:

  • 啊哈好吧...所以我必须使它成为一个函数来处理在设置 numberplus3 时未定义 var2 的问题?大概这是因为 numberplus3 中的函数仅在 var2 设置后才被评估?
  • @StanislavBeremski 你明白了,你试图引用一个在内存中无法访问的变量,看看编辑。
  • 太好了……我想我现在明白了。干杯!
猜你喜欢
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-18
  • 2020-06-22
  • 1970-01-01
相关资源
最近更新 更多