我正在尝试创建一个JSON对象来存储程序的一些参数。某些参数需要在定义时从其他参数计算出来。我想在对象定义中执行此操作,但这可能是不可能的
var params = {
a: 50,
b: 70,
c: this.a+this.b
}
的结果
会发生什么
>params.c
NaN
我希望发生什么
>params.c
120
修改
在进一步阅读后,我认为我使用的是Object Literal Notation而不是JSON。
答案 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);