SyntaxError: Property-Name __proto__ erscheint mehr als einmal im Objektliteral

Der JavaScript-Ausnahmefehler "property name __proto__ appears more than once in object literal" tritt auf, wenn ein Objektliteral mehrfach das Feld __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 ist schiefgelaufen?

Der Schlüssel __proto__ ist im Gegensatz zu anderen Eigenschaftsschlüsseln eine spezielle Syntax in einem Objektliteral. Er wird verwendet, um das Prototyp-Objekt des erstellten Objekts festzulegen und darf in einem Objektliteral nicht mehr als einmal 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 mit dem Namen __proto__ zu erstellen, kann sie mehrfach auftreten. Siehe Prototyp-Setter für die genauen Syntax-Einschränkungen.

Beachtenswert ist, dass der Schlüssel __proto__ in Objektliteralen eine spezielle Syntax ist und im Gegensatz zur Object.prototype.__proto__-Zugriffseigenschaft 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__() {
    return 1;
  },
};

Siehe auch