关于JavaScript中的“this”的问题

时间:2011-04-10 20:28:37

标签: javascript object scope this curly-braces

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

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

console.log('defaults',defaults);

不确定为什么defaults.baseName是“undefined”如何引用花括号中的东西?是可能的,还是我真的要输入'item_'两次?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

你可以这样做:

var defaults = {};
defaults.baseId = defaults.baseName = 'item_';

答案 2 :(得分: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 }
}

答案 3 :(得分:1)

您可以使用function代替class

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

现在this将拥有适当的背景。

使用原始代码的另一个选择是使baseName成为一个函数:

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

感谢ŠimeVidas的纠正!