嗯,问题可能不是很好,但我会尝试通过例子更清楚地说明:
var test = {
x1 : 10,
x2 : 20,
x3 : x1 + 5,
x4 : x2 + 5,
}
我需要的是参考" x1"或" x2"字段,之前已声明过。但是,如果我在例子中写道,JS说," x1没有被定义" 我的第二次尝试是:
var test = {
x1 : 10,
x2 : 20,
x3 : this.x1 + 5,
x4 : this.x2 + 5,
}
但" x3"和" x4"成为" NaN",因为" this.x1"和" this.x2"是"未定义"。
我甚至尝试过:
var test = {
x1 : 10,
x2 : 20,
x3 : test.x1,
x4 : test.x2,
}
但是得到"测试未定义"。 那么,我怎样才能参考" x1"或" x2"? 附:我知道,我可以这样写:
var test2 = new (function(){
this.x1 = 10;
this.x2 = 20;
this.x3 = this.x1 + 5;
this.x4 = this.x2 + 5;
})();
它会正常工作,但我真的需要一个类似JSON的对象定义。
更新:我忘记了这个对象的描述被称为"字面"。因此,我无法找到有关此主题的现有问题。但是,现在我已经为他们读了类似的问题和答案,并且没有找到答案,解决了我的问题 实际上我需要保留文字表示法,因为我正在开发一种配置文件格式",它必须具有声明性语法(当然,这种格式的解析器将根据此配置执行某些算法)文件)。这个配置文件必须是不懂JS的人才能理解和编辑的。对于他们来说,它不是脚本或对象,而只是具有指定结构的JSON。所以我最终不能使用一些init函数 即使是吸气剂也会增加太多的复杂性。这可能听起来很有趣,但是,它太复杂了。它将添加关键字" get"和" return"以及圆括号和分号标点符号。当JSON语法只有两种类型的括号和两种类型的标点符号时:冒号和逗号。因此,使用getter或函数,复杂性几乎翻倍,即使它们只包含一个字符串 现在我倾向于选择,只是为了添加" id"字段,并由它引用。但也许有人可以提供更好的解决方案。
P.S。除了为这个配置文件使用一些有效的JS之外,我没有任何选择,因为我的应用程序没有任何服务器端。只有本地JS和HTML文件,并且只有标准浏览器才能运行它们,所以没有文件访问权限。因为该配置文件将以JS文件的形式提供给应用程序。
答案 0 :(得分:1)
也许您使用get
语法:
var test = {
x1: 10,
x2: 20,
get x3() { return this.x1 + 5; },
get x4() { return this.x2 + 5; }
}
document.write(test.x3);

答案 1 :(得分:-1)
你应该这样做:
var test = {
x1 : 10,
x2 : 20,
x3 : function() {
return this.x1 + 5;
},
x4 : function() {
return this.x2 + 5;
},
}
alert(test.x3())
实现这一目标的另一种方式(更多oop):
var test = function() {
var self = this;
self.x1 = 10;
self.x2 = 20;
self.x3 = self.x1*2;
self.x4 = self.x2*2;
}
var toto = new test();
alert(toto.x3);