Очевидный простой ответ отсутствует, поэтому для полноты:
Но есть , любой способ иметь значения в свойствах объекта литерала зависит от других объявленных свойств раньше?
Нет. Все решения здесь откладывают до тех пор, пока объект не будет создан (по-разному), а затем назначит третье свойство. Простейший способ состоит в том, чтобы просто сделать это:
var foo = { a: 5, b: 6 }; foo.c = foo.a + foo.b;
Все остальные - более косвенные способы сделать то же самое. (Felix's особенно умный, но требует создания и уничтожения временной функции, добавления сложности и либо оставляет дополнительное свойство для объекта, либо [если вы
delete
это свойство] влияет на производительность последующего свойства доступ к этому объекту.)Если вам нужно, чтобы все были в одном выражении, вы можете сделать это без временного свойства:
var foo = function(o) { o.c = o.a + o.b; return o; }({a: 5, b: 6});
Или, конечно, если вам нужно для этого более одного раза:
function buildFoo(a, b) { var o = {a: a, b: b}; o.c = o.a + o.b; return o; }
, где вам нужно его использовать:
var foo = buildFoo(5, 6);