TypeError: kann Prototyp dieses Objekts nicht setzen
Die JavaScript-Ausnahme "kann Prototyp dieses Objekts nicht setzen" tritt auf, wenn versucht wird, den Prototyp eines Objekts zu setzen, dessen Prototyp jedoch eingefroren ist. Dies kann der Fall sein, wenn es sich um ein eingebautes unveränderliches Prototypobjekt handelt oder wenn es nicht erweiterbar ist.
Nachricht
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)
Fehlertyp
Was ist schiefgelaufen?
Sie verwenden eine der Methoden zur Mutierung von Prototypen, insbesondere Object.setPrototypeOf()
, auf einem Objekt, dessen Prototyp unveränderlich ist. Einige eingebaute Objekte haben aus Sicherheitsgründen unveränderliche Prototypen, wie Object.prototype
und window
. Nutzerobjekte können auch verhindern, dass Prototypenänderungen vorgenommen werden, indem sie Object.preventExtensions()
, Object.seal()
, oder Object.freeze()
verwenden.
Beispiele
Prototyp eines eingebauten Objekts ändern
Einige wenige eingebaute Objekte haben unveränderliche Prototypen. Zum Beispiel können Sie den Prototyp von Object.prototype
nicht ändern:
Object.setPrototypeOf(Object.prototype, {});
Dies verhindert, dass Sie das Verhalten aller Objekte im System beliebig ändern können. Der Prototyp von Object.prototype
ist immer null
. Andere eingebaute Prototypobjekte wie Function.prototype
und Array.prototype
sind jedoch standardmäßig in dieser Hinsicht nicht geschützt.
Prototyp eines nicht erweiterbaren Objekts ändern
Wenn Sie ein Objekt nicht erweiterbar machen, können Sie auch seinen Prototyp nicht ändern:
const obj = {};
Object.preventExtensions(obj);
Object.setPrototypeOf(obj, {});
// TypeError: can't set prototype of this object