Определения JSON с использованием внутренних переменных

1

Я пытаюсь создать объект JSON для хранения некоторых параметров для программы. Некоторые параметры должны вычисляться от других по мере их определения. Я хотел бы сделать это в определении объекта, но, возможно, это невозможно

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

Что происходит

>params.c
NaN

То, что я хотел, произошло

>params.c
120

редактировать

После некоторого дальнейшего чтения, я думаю, что использую Object Literal Notation вместо JSON.

Теги:
object
definition

3 ответа

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
}

Ресурсы

  • 0
    Это нормально, но я бы хотел избежать расчета каждого параметра при каждом его вызове.
  • 0
    @ Заменить атрибуты a и b временем изменится?
Показать ещё 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);
0

Лично я бы создал константы (поскольку магические числа - дьявол), но это слишком упрощенный пример:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню