这可能是一个新手问题。我已经使用 javascript 多年,但只是开始“认真”对待它。我有一个关于“这个”的问题
var defaults = {
baseId : 'item_',
baseName : this.baseId
}
console.log('defaults',defaults);
不知道为什么 defaults.baseName 是“未定义的” 如何引用花括号中的内容?有可能吗,还是我真的必须输入“item_”两次?
这可能是一个新手问题。我已经使用 javascript 多年,但只是开始“认真”对待它。我有一个关于“这个”的问题
var defaults = {
baseId : 'item_',
baseName : this.baseId
}
console.log('defaults',defaults);
不知道为什么 defaults.baseName 是“未定义的” 如何引用花括号中的内容?有可能吗,还是我真的必须输入“item_”两次?
简单的答案是你不能做你想做的事。在对象文字的解析/解释/评估(无论您想如何考虑)期间,它不存在,因此不能以任何方式引用它。
你可以这样做:
var defaults = {};
defaults.baseId = defaults.baseName = 'item_';
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 }
}
您可以function
改用,创建等效于class
:
function defaults() {
this.baseId = 'item_';
this.baseName = this.baseId;
}
现在this
将有适当的上下文。
使用您的原始代码的另一种选择是创建baseName
一个函数:
var defaults = {
baseId : 'item_',
baseName : function() { return this.baseId; }
};
感谢 Šime Vidas 的更正!