In JavaScript wird das erweiterbare Attribut eines Objekts verwendet, um anzugeben, ob dem Objekt neue Eigenschaften dynamisch hinzugefügt werden dürfen. Im ECMAScript 3-Standard sind alle Objekte erweiterbar. Im ECMAScript 5-Standard sind alle Objekte weiterhin standardmäßig erweiterbar, dieses Attribut kann jedoch durch Setzen geändert werden.
Um abzufragen, ob ein Objekt erweiterbar ist, können Sie die Object.isExtensible()-Anweisung verwenden:
Um ein Objekt nicht erweiterbar zu machen, können Sie die Anweisung Object.preventExtensions() verwenden:
Es ist erwähnenswert, dass es keine Möglichkeit gibt, ein Objekt wieder auf erweiterbar zu setzen, sobald es auf „nicht erweiterbar“ gesetzt ist, da es keine umgekehrte Operationsanweisung von Object.preventExtensions() gibt.
Der Geltungsbereich der Object.preventExtensions()-Anweisung ist das Objekt selbst und das Prototypobjekt ist nicht betroffen. Wenn ein Objekt als nicht erweiterbar festgelegt ist, können seinem Prototypobjekt weiterhin Eigenschaften dynamisch hinzugefügt werden, und diese dynamisch hinzugefügten Eigenschaften können weiterhin vom Objekt geerbt werden.
Object.seal() und Object.freeze()
Object.preventExtensions() kann verhindern, dass neue Eigenschaften dynamisch zum Objekt hinzugefügt werden. Zusätzlich zu dieser Operation gibt es in JavaScript zwei weitere strengere Operationen zum Schutz von Objekten: Object.seal() und Object.freeze().
Die Funktion von Object.seal() besteht darin, die konfigurierbare Eigenschaft aller objekteigenen Eigenschaften basierend auf Object.preventExtensions() auf false zu setzen. Wie die Object.preventExtensions()-Operation verfügt auch Object.seal() über keine umgekehrte Operation. Sobald das Objekt versiegelt ist, kann sein Zustand nicht wiederhergestellt werden. In JavaScript können Sie mit Object.isSealed() abfragen, ob ein Objekt versiegelt wurde.
Die Funktion von Object.freeze() besteht darin, die Eigenschaften aller Objekte selbst basierend auf Object.seal() auf schreibgeschützt zu setzen. Wie die Operationen Object.seal() und Object.preventExtensions() verfügt auch Object.freeze() über keine umgekehrte Operation, sodass sein Zustand nach dem Einfrieren des Objekts nicht wiederhergestellt werden kann. In JavaScript können Sie mit Object.isFrozen() abfragen, ob ein Objekt eingefroren wurde.
Unabhängig davon, ob es sich um Object.preventExtensions (), Object.seal () oder Object.freeze () handelt, ist sein Geltungsbereich das Objekt selbst, und das Prototypobjekt des Objekts wird nicht beeinträchtigt.