Как записать выражение в значение свойства объекта?
Инициализирую объект:
const myObject = {
a: 20,
b: 20,
sum: myObject.a + myObject.b
};
Получаю ошибку:
Cannot access 'myObject' before initialization
Как это сделать правильно?
Понимаю, что можно поступить следующим образом:
const myObject = {
a: 20,
b: 20
};
myObject.sum = myObject.a + myObject.b;
Есть ли возможность произвести вычисления сразу же при инициализации объекта?
upd: Извините за опечатку, сумма конечно же через плюс вычисляется:
sum: myObject.a + myObject.b
Ответы (2 шт):
const myObject = {
a: 20,
b: 20,
sum: () => myObject.a * myObject.b
};
console.log(myObject.sum())
myObject.a = 10
console.log(myObject.sum())
Так будет работать, а вот правильность такого вызывает вопросы) Возможно, вам пригодится https://learn.javascript.ru/proxy
Нет, так напрямую не обратиться и даже this.a и this.b будут недоступны, но есть один обходной пусть с помощью get, который так же не позволит положить туда произвольное значение, пока не объявите и не вызовете соответсвующий метод set:
const myObject = {
a: 20,
b: 20,
get sum () {return this.a + this.b},
get multiply () {return this.a * this.b}
};
console.log(myObject);
console.log(myObject.sum);
console.log(myObject.multiply);