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

时间:2018-02-13 00:09:31

标签: javascript json object definition

我正在尝试创建一个JSON对象来存储程序的一些参数。某些参数需要在定义时从其他参数计算出来。我想在对象定义中执行此操作,但这可能是不可能的

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

会发生什么

>params.c
NaN

我希望发生什么

>params.c
120

修改

在进一步阅读后,我认为我使用的是Object Literal Notation而不是JSON。

3 个答案:

答案 0 :(得分:1)

您可以使用此方法:

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

  

get语法将对象属性绑定到将在查找该属性时调用的函数。



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
}




资源

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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



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