Spec-Zone.ru › JavaScript

TypeError: невозможно установить прототип для этого объекта

Исключение JavaScript "can't set prototype of this object" возникает при попытке установить прототип объекта, но прототип объекта заморожен, либо потому что он является встроенным неизменяемым объектом-прототипом, либо потому что он нерасширяем.

Сообщение

TypeError: Immutable prototype object 'Object.prototype' cannot have their prototype set (V8-based)
TypeError: #<Object> is not extensible (V8-based)
TypeError: can't set prototype of this object (Firefox)
TypeError: Cannot set prototype of immutable prototype object (Safari)
TypeError: Attempted to assign to readonly property. (Safari)

Тип ошибки

TypeError

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

Вы используете один из методов, изменяющих прототип, — в первую очередь, Object.setPrototypeOf() — для объекта, чей прототип неизменяем. Некоторые встроенные объекты имеют неизменяемые прототипы, например Object.prototype и window, по соображениям безопасности. Пользовательские объекты также могут предотвратить изменение прототипа, используя Object.preventExtensions(), Object.seal(), или Object.freeze().

Примеры

Изменение прототипа встроенного объекта

Некоторые встроенные объекты имеют неизменяемые прототипы. Например, вы не можете изменить прототип Object.prototype:

Object.setPrototypeOf(Object.prototype, {});

Это не позволяет произвольно изменять поведение всех объектов в системе. Прототип Object.prototype всегда является null. Однако другие встроенные объекты-прототипы, такие как Function.prototype и Array.prototype, по умолчанию не защищены в этом отношении.

Изменение прототипа нерасширяемого объекта

Если вы делаете объект нерасширяемым, вы также не можете изменить его прототип:

const obj = {};
Object.preventExtensions(obj);
Object.setPrototypeOf(obj, {});
// TypeError: can't set prototype of this object

См. также

  • Object.setPrototypeOf()
  • Object.preventExtensions()

© 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/Cant_set_prototype

Spec-Zone.ru

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