Die offensichtliche, einfache Antwort fehlt, daher der Vollständigkeit halber:
Aber ist Gibt es eine Möglichkeit, die Werte in den Eigenschaften eines Objektliterales von anderen, früher deklarierten Eigenschaften abhängig zu machen?
Nein. Alle Lösungen hier verschieben es bis nach der Erstellung des Objekts (auf verschiedene Weise) und weisen dann die dritte Eigenschaft zu. Die einfachste Der beste Weg ist, dies einfach zu tun:
var foo = {
a: 5,
b: 6
};
foo.c = foo.a + foo.b;
Alle anderen sind nur indirektere Wege, um das Gleiche zu tun. (Die von Felix ist besonders clever, erfordert aber das Erstellen und Zerstören einer temporären Funktion, was die Komplexität erhöht; und hinterlässt entweder eine zusätzliche Eigenschaft auf dem Objekt oder [wenn Sie delete
diese Eigenschaft] Auswirkungen auf die Leistung von nachfolgenden Eigenschaftszugriffen auf dieses Objekt).
Wenn Sie alles innerhalb eines Ausdrucks benötigen, können Sie das auch ohne die temporäre Eigenschaft tun:
var foo = function(o) {
o.c = o.a + o.b;
return o;
}({a: 5, b: 6});
Oder natürlich, wenn Sie dies mehr als einmal tun müssen:
function buildFoo(a, b) {
var o = {a: a, b: b};
o.c = o.a + o.b;
return o;
}
dann dort, wo Sie es brauchen:
var foo = buildFoo(5, 6);