Javascript递归json decleration(es6)

时间:2016-03-09 22:20:20

标签: javascript json ecmascript-6

我正在试图弄清楚如何组织我的变量,这就是我想要的结果:

settings.txt.token => 'txt'
settings.txt.path => '/txt/'

这显然是一个非常简单的示例,但我希望settings.txt.path依赖于settings.txt.token。所以sudo decleration将是:

export var txt = {
   token: 'txt',
   path: '/' + token + '/'
};

这样做有好办法吗?请注意,我正在使用ES6。

2 个答案:

答案 0 :(得分:1)

一个属性的静态声明不能直接引用同一个对象中的另一个属性,因为该对象本身处于形成过程中并且尚未完全存在,并且javascript没有从静态声明引用同级属性的语法。因此,您必须推迟计算新属性的值,直到对象存在之后。你可以通过几种方式做到这一点。

一个是吸气剂:

export var txt = {
   token: 'txt',
   get path() { return '/' + this.token + '/';}
};

另一种方法是在静态声明完成后将属性添加到对象:

export var txt = {
   token: 'txt',
};
txt.path = '/' + txt.token + '/';

getter选项的优势在于,如果.token被修改,后续.path请求将自动反映.token的新值。第二个选项不是动态链接的。如果txt.path发生更改,则txt.token值不会自动更改。您可以选择任一行为。

答案 1 :(得分:0)

是的,您无法引用对象初始值设定项中的字段。但你可以在构造函数中:

export var txt = new function(){
    this.token = "txt";
    this.path = "/" + this.token + "/";
}