如何在 JS 对象定义中引用字段

How to refer a field inside a JS object definition?

本文关键字:引用 字段 定义 对象 JS      更新时间:2023-09-26

好吧,这个问题可能不是很好表述的,但我会尝试通过示例更清楚地说明它:

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。所以我最后不能使用一些初始化函数。
即使是 getter 也会增加太多的复杂性。这听起来可能很有趣,但是是的,它太复杂了。它将添加关键字"get"和"return",以及圆括号和分号标点符号。当 JSON 语法只有两种类型的括号和两种类型的标点符号时:冒号和逗号。因此,getter 或函数的复杂性几乎翻了一番,即使它们只包含一个字符串。
现在我倾向于选项,只是添加"id"字段,并由它引用。但也许有人可以提供更好的解决方案。

附言 除了对此配置文件使用一些有效的JS之外,我别无选择,因为我的应用程序没有任何服务器端。只有本地JS和HTML文件,只有标准浏览器运行它们,所以没有文件访问。因为该配置文件将以JS文件的形式提供给应用程序。

也许你使用get语法:

var test = {
    x1: 10,
    x2: 20,
    get x3() { return this.x1 + 5; },
    get x4() { return this.x2 + 5; }
}
document.write(test.x3);

你应该这样做:

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);