JSON 使用内部定义变量的定义

JSON Definitions Using Internally Defined Variables

我正在尝试创建一个 JSON 对象来存储程序的一些参数。一些参数需要在定义时根据其他参数计算得出。我想在对象定义中这样做,但也许这是不可能的

var params = {
        a: 50,
        b: 70,
        c: this.a+this.b
    } 
</pre>
结果

会发生什么

>params.c
NaN</pre>

我希望发生的事

>params.c
120</pre>

编辑

进一步阅读后,我想我使用的是对象文字表示法而不是 JSON。

就个人而言,我会创建常量(因为幻数是魔鬼),但这是一个过于简单化的示例:

const FIFTY = 50;
const SEVENTY = 70;
var params = {
  a: FIFTY,
  b: SEVENTY,
  c: FIFTY + SEVENTY
};

您可以使用这种方法:

为避免重新计算,请使用函数Object.assign

The get syntax binds an object property to a function that will be called when that property is looked up.

var params = {
  a: 50,
  b: 70,
  get c() {
    console.log('Called!');
    return this.a + this.b;
  }
};

console.log(params.c); // Prints 120 then Called!
console.log(params.c); // Prints 120 then Called!

var params = Object.assign({}, {
  a: 50,
  b: 70,
  get c() {
    console.log('Called from function Object.assign!');
    return this.a + this.b;
  }
});

params.a = 1000; // To illustrate.

console.log(params.c); // Prints 120
console.log(params.c); // Prints 120
.as-console-wrapper {
  max-height: 100% !important
}

资源

我建议做的是从一个不包含 c 的对象开始,然后在对象外部进行计算。计算完成后,只需将总和作为新的 key/value 对添加回对象:

var params = {
  a: 50,
  b: 70,
}

var sum = 0;

for (var el in params) {
  if (params.hasOwnProperty(el)) {
    sum += params[el];
  }
}

params['c'] = sum;
console.log(params);