Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Object.seal()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Die statische MethodeObject.seal()versiegelt ein Objekt. Das Versiegeln eines Objektsverhindert Erweiterungen und macht vorhandene Eigenschaften nicht konfigurierbar. Ein versiegeltes Objekt verfügt über einen festen Satz von Eigenschaften: Neue Eigenschaften können nicht hinzugefügt werden, bestehende Eigenschaften können nicht entfernt werden, ihre Aufzählbarkeit und Konfigurierbarkeit können nicht geändert werden, und sein Prototyp kann nicht neu zugewiesen werden. Die Werte bestehender Eigenschaften können weiterhin geändert werden, solange sie beschreibbar sind.seal() gibt dasselbe Objekt zurück, das übergeben wurde.
In diesem Artikel
Probieren Sie es aus
const object = { foo: 42,};Object.seal(object);object.foo = 33;console.log(object.foo);// Expected output: 33delete object.foo; // Cannot delete when sealedconsole.log(object.foo);// Expected output: 33Syntax
Object.seal(obj)Parameter
objDas Objekt, das versiegelt werden soll.
Rückgabewert
Das Objekt, das versiegelt wird.
Beschreibung
Das Versiegeln eines Objekts entspricht demVerhindern von Erweiterungen und dann dem Ändern aller vorhandenenEigenschaftsdescriptoren zuconfigurable: false. Dies hat zur Folge, dass der Satz von Eigenschaften des Objekts feststeht. Wenn alle Eigenschaften nicht konfigurierbar sind, können sie nicht von Dateneigenschaften zu Accessoreigenschaften und umgekehrt konvertiert werden, aber es wird nicht verhindert, dass die Werte der Dateneigenschaften geändert werden. Der Versuch, Eigenschaften eines versiegelten Objekts zu löschen oder hinzuzufügen oder eine Dateneigenschaft in einen Accessor zu konvertieren oder umgekehrt, schlägt fehl, entweder stillschweigend oder durch das Auslösen einesTypeError (meistens, aber nicht ausschließlich, wenn Code imstrict mode ausgeführt wird).
Private Elemente sind keine Eigenschaften und haben kein Konzept von Eigenschaftsdescriptoren. Private Elemente können weder hinzugefügt noch aus dem Objekt entfernt werden, unabhängig davon, ob das Objekt versiegelt ist oder nicht.
Die Prototypenkette bleibt unberührt. Aufgrund der Wirkung desVerhinderns von Erweiterungen kann das[[Prototype]] jedoch nicht neu zugewiesen werden.
Im Gegensatz zuObject.freeze() können bei Objekten, die mitObject.seal() versiegelt wurden, bestehende Eigenschaften geändert werden, solange sie beschreibbar sind.
Beispiele
>Verwendung von Object.seal
const obj = { prop() {}, foo: "bar",};// New properties may be added, existing properties// may be changed or removed.obj.foo = "baz";obj.lumpy = "woof";delete obj.prop;const o = Object.seal(obj);o === obj; // trueObject.isSealed(obj); // true// Changing property values on a sealed object// still works.obj.foo = "quux";// But you can't convert data properties to accessors,// or vice versa.Object.defineProperty(obj, "foo", { get() { return "g"; },}); // throws a TypeError// Now any changes, other than to property values,// will fail.obj.quaxxor = "the friendly duck";// silently doesn't add the propertydelete obj.foo;// silently doesn't delete the property// … and in strict mode such attempts// will throw TypeErrors.function fail() { "use strict"; delete obj.foo; // throws a TypeError obj.sparky = "arf"; // throws a TypeError}fail();// Attempted additions through// Object.defineProperty will also throw.Object.defineProperty(obj, "ohai", { value: 17,}); // throws a TypeErrorObject.defineProperty(obj, "foo", { value: "eit",}); // changes existing property valueNicht-Objekt-Argument
In ES5 führt das Argument dieser Methode, wenn es sich nicht um ein Objekt (ein primitiver Wert) handelt, zu einemTypeError. In ES2015 wird ein Nicht-Objekt-Argument unverändert ohne Fehler zurückgegeben, da primitive Werte per Definition bereits unveränderlich sind.
Object.seal(1);// TypeError: 1 is not an object (ES5 code)Object.seal(1);// 1 (ES2015 code)Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-object.seal> |