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
const obj = { __proto__: {}, __proto__: { a: 1 } };
Gültige Fälle
// 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__() {},
};