Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何引用JS对象定义中的字段?_Javascript - Fatal编程技术网

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

Javascript 如何引用JS对象定义中的字段?,javascript,Javascript,好吧,这个问题可能表述得不好,但我会通过例子让它更清楚: var test = { x1 : 10, x2 : 20, x3 : x1 + 5, x4 : x2 + 5, } 我需要的是引用先前声明的“x1”或“x2”字段。但是,如果我像示例中那样写,JS说,“x1没有定义”。 我的第二次尝试是: var test = { x1 : 10,

好吧,这个问题可能表述得不好,但我会通过例子让它更清楚:

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


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

您应该这样做:

var test = {
    x1 : 10,
    x2 : 20,
    x3 : function() {
        return this.x1 + 5;
    },
    x4 : function() {
        return this.x2 + 5;
    },
}
alert(test.x3())
实现这一点的另一种方法(更多oop):

也许您使用了一种语法:

var测试={
x1:10,
x2:20,
get x3(){返回this.x1+5;},
get x4(){返回this.x2+5;}
}

文件编写(测试x3)某些预处理的可能重复应该是必要的:一个可能的解决方案可能是一个字符串,其中包含要计算的值,如
x3:'this.x1+5',
eval可以执行并分配结果。eval可能是问题的最差解决方案。为什么不在初始定义之后只执行
test.x3=test.x1+5
。所以用户可以从另一个文本中引用在一个文本中定义的字段。它们不能引用任何可能的字段,但至少可以声明一些“库”,其中包含要重用的元素。这应该足够了。也许这比给他们权力去查阅所有资料更好。换句话说,它将使配置格式更加严格。示例:
varbase={x1:10,x2:20};var检验={x1:base.x1,x2:base.x2,x3:base.x1+5,x4:base.x2+5,}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);