【问题标题】:Javascript recursive json decleration (es6) [duplicate]Javascript递归json decleration(es6)[重复]
【发布时间】:2016-03-09 22:20:20
【问题描述】:

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

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

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

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

有什么好办法吗?请注意,我使用的是 ES6。

【问题讨论】:

  • 这不是 JSON,这只是 JavaScript。

标签: javascript json ecmascript-6


【解决方案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.token 更改,txt.path 值不会自动更改。您可以选择任一行为。

【讨论】:

  • 也许他只是想将其作为path 的初始值,而不是将它们始终链接,因此getter 可能不合适。
  • @Barmar - 也许,也许不是 - 不确定。我提供了两种选择。
【解决方案2】:

是的,您不能在对象初始化程序中引用字段。但是你可以在构造函数中:

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

【讨论】:

    猜你喜欢
    • 2021-02-19
    • 2020-07-03
    • 2021-10-19
    • 1970-01-01
    • 2020-04-19
    • 2018-08-31
    • 2019-06-20
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多