关于“的问题”;这";在JavaScript中
这可能是个新手问题。我已经使用javascript好几年了,但才开始“认真”对待它。我有一个关于“这个”的问题关于“的问题”;这";在JavaScript中,javascript,object,scope,this,curly-braces,Javascript,Object,Scope,This,Curly Braces,这可能是个新手问题。我已经使用javascript好几年了,但才开始“认真”对待它。我有一个关于“这个”的问题 不知道为什么defaults.baseName是“未定义的”,一个如何引用花括号中的内容?是否可能,或者我真的必须键入两次“item”?您可以使用函数,创建与类等效的: function defaults() { this.baseId = 'item_'; this.baseName = this.baseId; } 现在,此将具有适当的上下文 使用原始代码的另一个选项
不知道为什么defaults.baseName是“未定义的”,一个如何引用花括号中的内容?是否可能,或者我真的必须键入两次“item”?您可以使用
函数
,创建与类
等效的:
function defaults() {
this.baseId = 'item_';
this.baseName = this.baseId;
}
现在,此
将具有适当的上下文
使用原始代码的另一个选项是使baseName
成为函数:
var defaults = {
baseId : 'item_',
baseName : function() { return this.baseId; }
};
感谢西蒙·维达斯的更正 简单的答案是你不能做你想做的事。在对象文本的解析/解释/评估(不管您怎么想)过程中,它不存在,因此不能以任何方式引用它。您可以这样做:
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 }
}
我建议您使用
var prefix='item.'
,并在需要时将其附加到映射的值中,这样您就不必编写defaults
两次。您可以编写:返回this.baseId代码>
{
baseId: 'item_',
get baseName() { return this.baseId; },
set baseName(x) { this.baseId = x }
}