Это потому, что во время объявления Object
еще не инициализировано. Вы можете принудительно инициализировать с помощью выражения, вызываемого немедленно ( IIFFE ), или использовать Object.create
. Что-то вроде:
// IIFE
const x = (() => ({a: 1, b: 2, sum() {return this.a + this.b}}))();
console.log(`x.sum() => ${x.sum()}`);
// Object.create
const y = Object.create({a:1, b:2, sum() {return this.a + this.b}});
console.log(`y.sum() => ${y.sum()}`);