Spec-Zone.ru › JavaScript

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)

Тип ошибки

SyntaxError

Что пошло не так?

Ключ __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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API