Object.seal / preventExtensions în JavaScript

Obiecte ES5 (toate browserele moderne)

Blochează adăugarea de proprietăți noi (preventExtensions) și ștergerea celor existente (seal).

Sintaxă
Object.seal(obiect)
Object.preventExtensions(obiect)
Object.isSealed(obiect)
Object.isExtensible(obiect)

Ce face Object.seal / preventExtensions

Trei niveluri de protecție, de la cel mai slab: preventExtensions interzice doar adăugarea de proprietăți noi; seal interzice în plus ștergerea și redefinirea lor, dar valorile se pot schimba; freeze interzice orice modificare.

Object.isExtensible spune dacă se mai pot adăuga proprietăți, iar Object.isSealed dacă obiectul este sigilat.

Parametri

Parametru Descriere
obiect Obiectul protejat sau verificat.

Ce returnează

seal și preventExtensions: același obiect. Funcțiile is…: true sau false.

Exemple

Exemplul 1: Ce permite fiecare nivel

const sigilat = Object.seal({ nume: "Ana" });
sigilat.nume = "Maria";
console.log(sigilat.nume);
console.log(Reflect.set(sigilat, "varsta", 30), Reflect.deleteProperty(sigilat, "nume"));

const neextensibil = Object.preventExtensions({ a: 1 });
console.log(Reflect.set(neextensibil, "b", 2), Object.isSealed(neextensibil));
console.log(Reflect.deleteProperty(neextensibil, "a"), neextensibil);
console.log(Object.isExtensible(neextensibil), Object.isSealed(sigilat));

Rezultat

Maria
false false
false false
true {}
false true

Greșeli frecvente

  • Crezi că seal blochează și valorile. Valorile proprietăților existente se pot schimba; pentru blocare completă folosește Object.freeze.

Comenzi înrudite

  • Object.freeze / isFrozen: Îngheață un obiect: nu i se mai pot adăuga, șterge sau modifica proprietățile.
  • Reflect: Funcții pentru operațiile de bază pe obiecte (citire, scriere, ștergere, chei), cu aceleași nume ca în Proxy.
  • Object.defineProperty / defineProperties: Definește o proprietate cu control total: dacă poate fi modificată, afișată în bucle sau ștearsă, plus get/set.