918 Stimmen

Selbstreferenzen in Objektliteralen/Initialisierern

Gibt es eine Möglichkeit, so etwas wie das Folgende in JavaScript zum Laufen zu bringen?

var foo = {
    a: 5,
    b: 6,
    c: this.a + this.b  // Doesn't work
};

In der aktuellen Form führt dieser Code offensichtlich zu einem Referenzfehler, da this bezieht sich nicht auf foo . Aber ist Gibt es eine Möglichkeit, die Werte in den Eigenschaften eines Objektliterales von anderen, früher deklarierten Eigenschaften abhängig zu machen?

-1voto

alex-e-leon Punkte 333

Wenn Sie natives JS verwenden möchten, bieten die anderen Antworten gute Lösungen.

Aber wenn Sie bereit sind, selbstreferenzierende Objekte zu schreiben wie:

{ 
  a: ...,
  b: "${this.a + this.a}",
}

Ich habe eine npm-Bibliothek namens selbstreferenziertes Objekt die diese Syntax unterstützt und ein natives Objekt zurückgibt.

-1voto

Ein anderer Ansatz wäre, das Objekt zuerst zu deklarieren, bevor ihm Eigenschaften zugewiesen werden:

const foo = {};
foo.a = 5;
foo.b = 6;
foo.c = foo.a + foo.b;  // Does work
foo.getSum = () => foo.a + foo.b + foo.c;  // foo.getSum() === 22

Damit können Sie über den Namen der Objektvariablen auf die bereits zugewiesenen Werte zugreifen.
Am besten für config.js fichier.

-4voto

David Newberry Punkte 175
var x = {
    a: (window.secreta = 5),
    b: (window.secretb = 6),
    c: window.secreta + window.secretb
};

Dies ist fast identisch mit der Antwort von @slicedtoad, verwendet aber keine Funktion.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X