Как записать выражение в значение свойства объекта?

Инициализирую объект:

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 шт):

Автор решения: Jour

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

→ Ссылка
Автор решения: Mr. Man

Нет, так напрямую не обратиться и даже 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);

→ Ссылка