The JavaScript exception "can't set prototype of this object" occurs when attempting to set the prototype of an object, but the object's prototype is frozen, either by being a built-in immutable prototype object, or by being non-extensible.
MessageTypeError: 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)Error type What went wrong?
You are using one of the prototype-mutating methodsâmost notably, Object.setPrototypeOf()
âon an object whose prototype is immutable. Some built-in objects have immutable prototypes, such as Object.prototype
and window
, for security reasons. User objects can also prevent prototype changes by using Object.preventExtensions()
, Object.seal()
, or Object.freeze()
.
A selected few built-in objects have immutable prototypes. For example, you cannot change the prototype of Object.prototype
:
Object.setPrototypeOf(Object.prototype, {});
This prevents you from being able to arbitrarily change the behavior of all objects in the system. The prototype of Object.prototype
is always null
. However, other built-in prototype objects, such as Function.prototype
and Array.prototype
, are not protected by default in this regard.
If you make an object non-extensible, you cannot change its prototype either:
const obj = {};
Object.preventExtensions(obj);
Object.setPrototypeOf(obj, {});
// TypeError: can't set prototype of this object
See also
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4