1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
---
title: Object.seal()
slug: Web/JavaScript/Reference/Global_Objects/Object/seal
tags:
- ECMAScript 5
- Italian
- Italiano
- JavaScript
- JavaScript 1.8.5
- Method
- Object
translation_of: Web/JavaScript/Reference/Global_Objects/Object/seal
---
<div>{{JSRef}}</div>
<p>Il metodo <code><strong>Object.seal()</strong></code> "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.</p>
<div>{{EmbedInteractiveExample("pages/js/object-prototype-seal.html")}}</div>
<p class="hidden">Il codice sorgente per questo esempio interattivo si trova in una repository di GitHub. Se vuoi contribuire al progetto degli esempi interattivi, puoi clonare <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> ed inviarci una pull request.</p>
<h2 id="Sintassi">Sintassi</h2>
<pre class="syntaxbox"><code>Object.seal(<var>obj</var>)</code></pre>
<h3 id="Parametri">Parametri</h3>
<dl>
<dt><code>obj</code></dt>
<dd>L'oggetto da sigillare.</dd>
</dl>
<h3 id="Valore_di_ritorno">Valore di ritorno</h3>
<p>L'oggetto sigillato.</p>
<h2 id="Descrizione">Descrizione</h2>
<p>Di default, gli oggetti sono {{jsxref("Object.isExtensible()", "estensibili", "", 1)}} (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 {{jsxref("TypeError")}} (più frequentemente, ma non necessariamente, quest'ultimo scenario accadrebbe in {{jsxref("Strict_mode", "strict mode", "", 1)}}).</p>
<p>Le catene di prototipi non vengono sigillate. Invece, la proprietà {{jsxref("Object.proto", "__proto__")}} {{deprecated_inline}} viene sigillata.</p>
<p>Ritorna l'oggetto passato ma sigillato.</p>
<h2 id="Examples">Examples</h2>
<pre class="brush: js">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
</pre>
<h2 id="Note">Note</h2>
<p>In ES5, se l'argomento di questo metodo non è un'oggetto, allora verrà generato un {{jsxref("TypeError")}}. In ES2015, un argomento che non è un oggetto verrà trattato come se fosse un normale oggetto già sigillato, e verrà perciò semplicemente ritornato.</p>
<pre class="brush: js">Object.seal(1);
// TypeError: 1 non è un oggetto (codice in ES5)
Object.seal(1);
// 1 (codice in ES2015)
</pre>
<h3 id="Differenza_con_Object.freeze">Differenza con <code>Object.freeze()</code></h3>
<p>Le proprietà esistenti in oggetti congelati con <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze">Object.freeze()</a></code> sono rese immutabili. Gli oggetti sigillati con <code>Object.seal()</code> possono ricevere modifiche alle proprietà esistenti.</p>
<h2 id="Specifiche">Specifiche</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Specification</th>
<th scope="col">Status</th>
<th scope="col">Comment</th>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.2.3.8', 'Object.seal')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td>Definizione iniziale. Implementato in JavaScript 1.8.5.</td>
</tr>
<tr>
<td>{{SpecName('ES6', '#sec-object.seal', 'Object.seal')}}</td>
<td>{{Spec2('ES6')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-object.seal', 'Object.seal')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="Compatibilità_con_i_browser">Compatibilità con i browser</h2>
<div>
<div class="hidden">La compatibility table su questa pagina è generata da dati strutturali. Se vuoi contribuire per i dati, puoi visitare <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> ed inviarci una pull request.</div>
<p>{{Compat("javascript.builtins.Object.seal")}}</p>
</div>
<h2 id="Vedi_anche">Vedi anche</h2>
<ul>
<li>{{jsxref("Object.isSealed()")}}</li>
<li>{{jsxref("Object.preventExtensions()")}}</li>
<li>{{jsxref("Object.isExtensible()")}}</li>
<li>{{jsxref("Object.freeze()")}}</li>
<li>{{jsxref("Object.isFrozen()")}}</li>
</ul>
|