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() (en-US) 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() (en-US) 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() (en-US) 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