2

这可能是一个新手问题。我已经使用 javascript 多年,但只是开始“认真”对待它。我有一个关于“这个”的问题

var defaults = {
    baseId : 'item_',
    baseName : this.baseId
}

console.log('defaults',defaults);

不知道为什么 defaults.baseName 是“未定义的” 如何引用花括号中的内容?有可能吗,还是我真的必须输入“item_”两次?

4

4 回答 4

3

简单的答案是你不能做你想做的事。在对象文字的解析/解释/评估(无论您想如何考虑)期间,它不存在,因此不能以任何方式引用它。

于 2011-04-10T20:40:52.557 回答
2

你可以这样做:

var defaults = {};
defaults.baseId = defaults.baseName = 'item_';
于 2011-04-10T20:41:11.400 回答
2

JavaScript 对象字面量是一种语法糖,因此它不起作用。

this; // at point A
var defaults = {
    baseId : 'item_',
    baseName : this.baseId
}

翻译成

this; // point A
var defaults = new Object();
defaults.baseId = 'item_';
defaults.baseName = this.baseId; // "this" here is same as "this" at point A

您可以使用 getter 和 setter。

{
   baseId: 'item_',
   get baseName() { return this.baseId; },
   set baseName(x) { this.baseId = x }
}
于 2011-04-10T21:02:48.027 回答
1

您可以function改用,创建等效于class

function defaults() {
   this.baseId = 'item_';
   this.baseName = this.baseId;
}

现在this将有适当的上下文。

使用您的原始代码的另一种选择是创建baseName一个函数:

var defaults = {
    baseId : 'item_',
    baseName : function() { return  this.baseId; }
};

感谢 Šime Vidas 的更正!

于 2011-04-10T20:38:01.370 回答