TypeError: can't define property "x": "obj" is not extensible

Fehlermeldung

TypeError: can't define property "x": "obj" is not extensible (Firefox)
TypeError: Cannot define property: "x", object is not extensible. (Chrome)

Fehlertyp

TypeError

Was ist falsch gelaufen?

Normalerweise ist ein Objekt erweiterbar und neue Eigenschaften können hinzugefügt werden. In diesem Fall markiert Object.preventExtensions() ein Objekt als nicht mehr erweiterbar, so dass ein Objekt nur noch die Eigenschaften haben kann, die es vor dem Aufruf hatte.

Beispiele

Im strict mode wird ein TypeError erzeugt, wenn versucht wird eine Eigenschaft zu einem nicht erweiterbaren Objekt hinzuzufügen. Im normalen Modus wird das Hinzufügen einfach ignoriert.

'use strict';

var obj = {};
Object.preventExtensions(obj);

obj.x = 'foo';
// TypeError: can't define property "x": "obj" is not extensible

Im strict mode und normalen Modus wird ein Fehler erzeugt, wenn Object.defineProperty() benutzt wird, um eine Eigenschaft zu einem nicht erweiterbaren Objekt hinzuzufügen.

var obj = { }; 
Object.preventExtensions(obj); 

Object.defineProperty(obj, 
  'x', { value: "foo" }
);
// TypeError: can't define property "x": "obj" is not extensible

Um diesen Fehler zu vermeiden muss entweder der Aufruf von Object.preventExtensions() entfernt werden oder die Position des Aufrufes so verschoben werden, dass das Hinzufügen von Eigenschaften davor passiert und das Objekt erst danach als nicht erweiterbar markiert wird. Natürlich kann auch die neue Eigenschaft entfernt werden, wenn sie nicht benötigt wird.

'use strict'; 

var obj = {}; 
obj.x = 'foo'; // add property first and only then prevent extensions

Object.preventExtensions(obj);

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
 Mitwirkende an dieser Seite: schlagi123
 Zuletzt aktualisiert von: schlagi123,