Я пытаюсь создать объект JSON для хранения некоторых параметров для программы. Некоторые параметры должны вычисляться от других по мере их определения. Я хотел бы сделать это в определении объекта, но, возможно, это невозможно
var params = {
a: 50,
b: 70,
c: this.a+this.b
}
Result Что происходит
>params.c
NaN
То, что я хотел, произошло
>params.c
120
редактировать
После некоторого дальнейшего чтения, я думаю, что использую Object Literal Notation вместо JSON.
Вы можете использовать этот подход:
Чтобы избежать повторного расчета, используйте функцию 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
}
a
и b
временем изменится?
То, что я бы рекомендовал делать, начинается с объекта, который не содержит 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);
Лично я бы создал константы (поскольку магические числа - дьявол), но это слишком упрощенный пример:
const FIFTY = 50;
const SEVENTY = 70;
var params = {
a: FIFTY,
b: SEVENTY,
c: FIFTY + SEVENTY
};