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

时间:2016-01-28 08:32:27

标签: javascript

嗯,问题可能不是很好,但我会尝试通过例子更清楚地说明:

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文件的形式提供给应用程序。

2 个答案:

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