Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
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 esnicht erweiterbar ist.
In diesem Artikel
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
TypeErrorWas ist schiefgelaufen?
Sie verwenden eine der Methoden zur Mutierung von Prototypen, insbesondereObject.setPrototypeOf(), auf einem Objekt, dessen Prototyp unveränderlich ist. Einige eingebaute Objekte haben aus Sicherheitsgründen unveränderliche Prototypen, wieObject.prototype undwindow. Nutzerobjekte können auch verhindern, dass Prototypenänderungen vorgenommen werden, indem sieObject.preventExtensions(),Object.seal(), oderObject.freeze() verwenden.
Beispiele
>Prototyp eines eingebauten Objekts ändern
Einige wenige eingebaute Objekte haben unveränderliche Prototypen. Zum Beispiel können Sie den Prototyp vonObject.prototype nicht ändern:
Object.setPrototypeOf(Object.prototype, {});Dies verhindert, dass Sie das Verhalten aller Objekte im System beliebig ändern können. Der Prototyp vonObject.prototype ist immernull. Andere eingebaute Prototypobjekte wieFunction.prototype undArray.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