SyntaxError: Eigenschaftenname __proto__ erscheint mehr als einmal im Objektliteral

Der JavaScript-Fehler "Eigenschaftenname __proto__ erscheint mehr als einmal im Objektliteral" tritt auf, wenn ein Objektliteral mehrere Vorkommen des Felds __proto__ enthält, das verwendet wird, um das Prototyp-Objekt dieses neuen Objekts festzulegen.

Meldung

SyntaxError: Duplicate __proto__ fields are not allowed in object literals (V8-based)
SyntaxError: property name __proto__ appears more than once in object literal (Firefox)
SyntaxError: Attempted to redefine __proto__ property. (Safari)

Fehlertyp

Was schiefgelaufen ist

Der Schlüssel __proto__ ist im Gegensatz zu anderen Eigenschaften-Schlüsseln eine spezielle Syntax in einem Objektliteral. Er wird verwendet, um den Prototyp des erstellten Objekts festzulegen und darf nicht mehr als einmal in einem Objektliteral erscheinen. Beachten Sie, dass diese Einschränkung nur für die __proto__ Prototyp-Setter-Syntax gilt: Wenn sie tatsächlich die Wirkung hat, eine Eigenschaft namens __proto__ zu erstellen, kann sie mehrmals erscheinen. Siehe Prototyp-Setter für die genauen Syntaxbeschränkungen.

Es ist erwähnenswert, dass der __proto__ Schlüssel in Objektliteralen eine spezielle Syntax darstellt und im Gegensatz zur Object.prototype.__proto__ Accessor-Eigenschaft nicht veraltet ist.

Beispiele

Ungültige Fälle

js
const obj = { __proto__: {}, __proto__: { a: 1 } };

Gültige Fälle

js
// Only setting the prototype once
const obj = { __proto__: { a: 1 } };

// These syntaxes all create a property called "__proto__" and can coexist
// They would overwrite each other and the last one is actually used
const __proto__ = null;
const obj2 = {
  ["__proto__"]: {},
  __proto__,
  __proto__() {},
  get __proto__() {},
};

Siehe auch