Il metodo Object.seal() "sigilla" un oggetto, e ciò rende impossibile l'aggiunta di nuove proprietà e rende tutte le proprietà esistenti non-configurabili. I valori delle proprietà presenti possono comunque essere cambiati, finché sono sovrascrivibili.

Sintassi

Object.seal(obj)

Parametri

obj
L'oggetto da sigillare.

Valore di ritorno

L'oggetto sigillato.

Descrizione

Di default, gli oggetti sono estensibili (possono essergli aggiunte nuove proprietà). Sigillare un oggetto rende impossibile l'aggiunta di nuove proprietà e rende tutte le proprietà esistenti non-configurabili. Questo rende le proprietà dell'oggetto statiche ed immutabili. Rendere tutte le proprietà non-configurabili, inoltre, rende impossibile la conversione da proprietà "data" a proprietà "accessor" e viceversa, ma non rende impossibile la modifica dei valori delle proprietà "data". Qualsiasi tentativo di aggiungere o rimuovere proprietà ad un oggetto sigillato, o convertire una proprietà "data" in una proprietà "accessor" o viceversa, fallirebbe, o in modo silenzioso o  attraverso il ritorno di un TypeError (più frequentemente, ma non necessariamente, quest'ultimo scenario accadrebbe in strict mode).

Le catene di prototipi non vengono sigillate. Invece, la proprietà __proto__ viene sigillata.

Ritorna l'oggetto passato ma sigillato.

Examples

var obj = {
  prop: function() {},
  foo: 'bar'
};

// Nuove proprietà potrebbero essere aggiunte, proprietà esistenti
// potrebbero essere modificate o rimosse.
obj.foo = 'baz';
obj.lumpy = 'woof';
delete obj.prop;

var o = Object.seal(obj);

o === obj; // true
Object.isSealed(obj); // === true

// Cambiare proprietà su un oggetto sigillato
// è ancora possibile.
obj.foo = 'quux';

// Ma non puoi convertire proprietà "data" in proprietà "accessor"
// o viceversa.
Object.defineProperty(obj, 'foo', {
  get: function() { return 'g'; }
}); // genera un TypeError

// Ora, qualunque cambiamento, eccetto i valori delle proprietà,
// fallirà.
obj.quaxxor = 'the friendly duck';
// silenziosamente non aggiunge la proprietà, per cui non genera errori od eccezioni
delete obj.foo;
// silenziosamente non rimuove la proprietà, per cui non genera errori od eccezioni

// ...ed in strict mode, aggiungere o rimuovere proprietà
// genererà TypeErrors.
function fail() {
  'use strict';
  delete obj.foo; // genera un TypeError
  obj.sparky = 'arf'; // genera un TypeError
}
fail();

// Anche aggiungere proprietà tramite
// Object.defineProperty genererà l'errore.
Object.defineProperty(obj, 'ohai', {
  value: 17
}); // genera un TypeError
Object.defineProperty(obj, 'foo', {
  value: 'eit'
}); // modifica il valore di una proprietà esistente

Note

In ES5, se l'argomento di questo metodo non è un'oggetto, allora verrà generato un TypeError. In ES2015, un argomento che non è un oggetto verrà trattato come se fosse un normale oggetto già sigillato, e verrà perciò semplicemente ritornato.

Object.seal(1);
// TypeError: 1 non è un oggetto (codice in ES5)

Object.seal(1);
// 1                             (codice in ES2015)

Confronto con Object.freeze()

Le proprietà esistenti in oggetti congelati con Object.freeze() sono rese immutabili. Gli oggetti sigillati con Object.seal() possono ricevere modifiche alle proprietà esistenti.

Specifiche

Specification Status Comment
ECMAScript 5.1 (ECMA-262)
The definition of 'Object.seal' in that specification.
Standard Definizione iniziale. Implementato in JavaScript 1.8.5.
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Object.seal' in that specification.
Standard  
ECMAScript Latest Draft (ECMA-262)
The definition of 'Object.seal' in that specification.
Draft  

Compatibilità con i browser

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support6 Yes49125.1
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support Yes Yes Yes4 Yes Yes Yes

Vedi anche

Tag del documento e collaboratori

Hanno collaborato alla realizzazione di questa pagina: DanielVip3
Ultima modifica di: DanielVip3,