SyntaxError: свойство __proto__ появилось более одного раза в инициализаторе объекта
Исключение JavaScript "свойство __proto__ появилось более одного раза в инициализаторе объекта" возникает, когда инициализатор объекта содержит несколько вхождений поля __proto__, которое используется для установки прототипа этого нового объекта.
Сообщение
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)
Тип ошибки
Что пошло не так?
Ключ __proto__, в отличие от других ключей свойств, является специальным синтаксисом в инициализаторе объекта. Он используется для установки прототипа создаваемого объекта и не может появляться более одного раза в инициализаторе объекта. Обратите внимание, что это ограничение применяется только к синтаксису сеттера прототипа __proto__: если он фактически приводит к созданию свойства с именем __proto__, то он может появляться несколько раз. См. сеттер прототипа для точных ограничений синтаксиса.
Стоит отметить, что ключ __proto__ в инициализаторах объектов является специальным синтаксисом и не устарел, в отличие от свойства доступатора Object.prototype.__proto__.
Примеры
Недопустимые случаи
const obj = { __proto__: {}, __proto__: { a: 1 } };
Допустимые случаи
// 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;
},
};
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Duplicate_proto