Object.preventExtensions()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Die Object.preventExtensions() statische Methode verhindert, dass neue Eigenschaften jemals zu einem Objekt hinzugefügt werden können (d. h. sie verhindert zukünftige Erweiterungen des Objekts). Sie verhindert auch, dass das Prototyp-Objekt neu zugewiesen wird.

Probieren Sie es aus

const object1 = {};

Object.preventExtensions(object1);

try {
  Object.defineProperty(object1, "property1", {
    value: 42,
  });
} catch (e) {
  console.log(e);
  // Expected output: TypeError: Cannot define property property1, object is not extensible
}

Syntax

js
Object.preventExtensions(obj)

Parameter

obj

Das Objekt, welches nicht mehr erweiterbar gemacht werden soll.

Rückgabewert

Das Objekt, das nicht mehr erweiterbar gemacht wird.

Beschreibung

Ein Objekt ist erweiterbar, wenn neue Eigenschaften hinzugefügt werden können. Object.preventExtensions() kennzeichnet ein Objekt als nicht mehr erweiterbar, sodass es nie Eigenschaften über die hinaus haben wird, die es zu dem Zeitpunkt hatte, als es als nicht erweiterbar markiert wurde. Beachten Sie, dass die Eigenschaften eines nicht erweiterbaren Objekts im Allgemeinen weiterhin gelöscht werden können. Der Versuch, neue Eigenschaften zu einem nicht erweiterbaren Objekt hinzuzufügen, wird fehlschlagen, entweder stillschweigend oder, im strict mode, wird ein TypeError ausgelöst.

Im Gegensatz zu Object.seal() und Object.freeze() ruft Object.preventExtensions() ein intrinsisches JavaScript-Verhalten auf und kann nicht durch eine Kombination mehrerer anderer Operationen ersetzt werden. Es hat auch sein Reflect-Gegenstück (welches nur für intrinsische Operationen existiert), Reflect.preventExtensions().

Object.preventExtensions() verhindert nur das Hinzufügen eigener Eigenschaften. Eigenschaften können weiterhin zum Prototyp des Objekts hinzugefügt werden.

Diese Methode macht die [[Prototype]] des Zielobjekts unveränderbar; jede Neu-Zuweisung der [[Prototype]] wird einen TypeError auslösen. Dieses Verhalten ist spezifisch für die interne [[Prototype]]-Eigenschaft; andere Eigenschaften des Zielobjekts bleiben veränderbar.

Es gibt keine Möglichkeit, ein Objekt wieder erweiterbar zu machen, nachdem es als nicht erweiterbar markiert wurde.

Beispiele

Verwendung von Object.preventExtensions

js
// Object.preventExtensions returns the object
// being made non-extensible.
const obj = {};
const obj2 = Object.preventExtensions(obj);
obj === obj2; // true

// Objects are extensible by default.
const empty = {};
Object.isExtensible(empty); // true

// They can be made un-extensible
Object.preventExtensions(empty);
Object.isExtensible(empty); // false

// Object.defineProperty throws when adding
// a new property to a non-extensible object.
const nonExtensible = { removable: true };
Object.preventExtensions(nonExtensible);
Object.defineProperty(nonExtensible, "new", {
  value: 8675309,
}); // throws a TypeError

// In strict mode, attempting to add new properties
// to a non-extensible object throws a TypeError.
function fail() {
  "use strict";
  // throws a TypeError
  nonExtensible.newProperty = "FAIL";
}
fail();

Der Prototyp eines nicht erweiterbaren Objekts ist unveränderbar:

js
const fixed = Object.preventExtensions({});
// throws a 'TypeError'.
fixed.__proto__ = { oh: "hai" };

Nicht-Objekt-Argument

In ES5 führt diese Methode bei einem Argument, das kein Objekt ist (eine Primitive), zu einem TypeError. In ES2015 wird ein Nicht-Objekt-Argument unverändert zurückgegeben, ohne Fehler auszulösen, da primitive Werte per Definition bereits unveränderlich sind.

js
Object.preventExtensions(1);
// TypeError: 1 is not an object (ES5 code)

Object.preventExtensions(1);
// 1                             (ES2015 code)

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-object.preventextensions

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
preventExtensions
ES2015 behavior for non-object argument

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch