Симметрия уже есть. {foo}
эквивалентно {foo: () => 1 }
, то есть объекту, содержащему свойство foo, которое является функцией. Например. затем вы можете назвать это так, если хотите:
bar.foo();
Ваш запрос, кажется, для нового синтаксиса, который вместо этого вызывает foo
и заполняет bar.foo
результатом. Нет такого синтаксиса . Что если foo
принимает аргументы? Что если foo
является асинхронным (тогда вы захотите использовать await
)? Как вы получили функции с тем же именем, что и у свойств? Без продемонстрированного варианта использования трудно увидеть какое-либо значение для оптимизации этого шаблона.
Короче не всегда лучше читается.
Если у вас есть набор функций, предназначенных для предоставления результатов для набора свойств с одинаковыми именами, вы, возможно, могли бы сконструировать что-то, используя помощник mapObject , например:
const mapObj = (o, f) => Object.assign({}, ...Object.keys(o).map(k => ({[k]: f(o[k])})));
const foo = () => 1;
const fum = () => 2;
let bar = mapObj({foo, fum}, f => f());
console.log(JSON.stringify(bar));