Skip to content

Commit 7578a6b

Browse files
Apply suggestions from code review
Co-authored-by: Dorin-David <70648503+Dorin-David@users.noreply.github.com>
1 parent ce13c67 commit 7578a6b

File tree

1 file changed

+24
-24
lines changed
  • 1-js/07-object-properties/01-property-descriptors

1 file changed

+24
-24
lines changed

1-js/07-object-properties/01-property-descriptors/article.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ In questo capitolo studieremo ulteriori opzioni di configurazione, e nel prossim
1212
Le proprietà degli oggetti, oltre ad un **`valore`**, possiedono tre attributi speciali (cosi detti "flags", o "bandiere"):
1313

1414
- **`writable`** -- se impostato a `true`, il valore può essere modificato, altrimenti è possibile accedervi in sola lettura.
15-
- **`enumerable`** -- se impostato a `true`, potrà apparire nei loop, altrimenti non verrà considerata.
15+
- **`enumerable`** -- se impostato a `true`, appare nei loop, altrimenti non verrà considerata.
1616
- **`configurable`** -- se impostato a `true`, la proprietà può essere cancellata e questi attributi possono essere modificati.
1717

1818
Non li abbiamo mai visti fino ad ora, perché generalmente non vengono mostrati. Quando creiamo una proprietà in "modo ordinario", questi attributi vengono tutti impostati a `true`. Ma possiamo comunque modificarli in qualsiasi momento.
@@ -63,14 +63,14 @@ Object.defineProperty(obj, propertyName, descriptor)
6363
```
6464

6565
`obj`, `propertyName`
66-
: L'oggetto e la proprietà in cui applicare il descrittore.
66+
: L'oggetto e la proprietà a cui applicare il descrittore.
6767

6868
`descriptor`
69-
: Descrittore di proprietà dell'oggetto da applicare.
69+
: Oggetto *descriptor* da utilizzare.
7070

71-
Se la proprietà esiste, `defineProperty` aggiornerà l'attributo. Altrimenti, creerà la proprietà con il valore e gli attributi forniti, se un attributo non viene fornito, gli verrà assegnato il valore `false`.
71+
Se la proprietà esiste, `defineProperty` aggiornerà l'attributo. Altrimenti, creerà la proprietà con il valore e gli attributi forniti; se un attributo non viene fornito, gli verrà assegnato il valore `false`.
7272

73-
Ad esempio. qui creiamo una proprietà `name` con tutti gli attributi a `false`:
73+
Ad esempio, qui creiamo una proprietà `name` con tutti gli attributi `false`:
7474

7575
```js run
7676
let user = {};
@@ -96,13 +96,13 @@ alert( JSON.stringify(descriptor, null, 2 ) );
9696
*/
9797
```
9898

99-
Confrontandola con la proprietà "creata normalmente" `user.name` vista sopra, ora tutti gli attributi sono a `false`. Se questo non è ciò che vogliamo, allora dovremmo impostarli a `true` tramite il `descriptor`.
99+
Confrontandola con la proprietà "creata normalmente" `user.name` vista sopra, ora tutti gli attributi sono `false`. Se questo non è ciò che vogliamo, allora dovremmo impostarli a `true` tramite il `descriptor`.
100100

101-
Ora analizziamo gli effetti degli attributi guardando ad alcuni esempi.
101+
Ora analizziamo gli effetti degli attributi guardando alcuni esempi.
102102

103103
## Non-writable
104104

105-
Vediamo come rendere `user.name` non-writable (non può essere riassegnata), modificando l'attributo `writable`:
105+
Vediamo come rendere `user.name` *non-writable* (la variabile non può essere riassegnata) modificando l'attributo `writable`:
106106

107107
```js run
108108
let user = {
@@ -123,18 +123,18 @@ user.name = "Pete"; // Error: Cannot assign to read only property 'name'
123123
Ora nessuno potrà modificare il nome dell'utente, a meno che non vada a sovrascrivere il valore degli attributi con `defineProperty`.
124124

125125
```smart header="Gli errori verranno mostrati solamente in strict mode"
126-
Se non siamo in "strict mode", e tentiamo di sovrascrivere una proprietà non-writable, non verrà mostrato alcun errore. Nonostante non venga mostrato l'errore, l'operazione fallirà comunque. Quindi le violazioni di attributi fuori dalla strict mode verranno ignorate silenziosamente.
126+
Se non siamo in "strict mode", e tentiamo di sovrascrivere una proprietà non-writable, non verrà mostrato alcun errore. Nonostante non venga mostrato l'errore, l'operazione fallirà comunque. Quindi le violazioni di attributi fuori dalla strict mode verranno silenziosamente ignorate.
127127
```
128128

129-
Qui vediamo lo stesso esempio, ma la proprietà viene creata da zero:
129+
Qui vediamo lo stesso esempio, ma la proprietà viene creata dal nulla:
130130

131131
```js run
132132
let user = { };
133133

134134
Object.defineProperty(user, "name", {
135135
*!*
136136
value: "John",
137-
// per le nuove proprietà dobbiamo esplicitare quali attributi valgono true
137+
// per le nuove proprietà dobbiamo esplicitare quali attributi sono true
138138
enumerable: true,
139139
configurable: true
140140
*/!*
@@ -148,7 +148,7 @@ user.name = "Pete"; // Error
148148

149149
Ora proviamo ad aggiungere un metodo `toString` ad `user`.
150150

151-
Normalmente, la funzione built-in (integrata) `toString` per gli oggetti, è non-enumerable, quindi non verrà mostrata nei cicli come `for..in`. Ma se proviamo ad aggiungere una nostra definizione di `toString`, allora questa verrà mostrata nei cicli `for..in`, come nell'esempio:
151+
Normalmente, la funzione *built-in* (integrata) `toString` , per gli oggetti è non-enumerable, quindi non verrà mostrata nei cicli come `for..in`. Ma se proviamo ad aggiungere una nostra definizione di `toString`, allora questa verrà mostrata nei cicli `for..in`, come nell'esempio:
152152

153153
```js run
154154
let user = {
@@ -162,7 +162,7 @@ let user = {
162162
for (let key in user) alert(key); // name, toString
163163
```
164164

165-
Se non è cio che ci aspettiamo, possiamo impostare l'attributo `enumerable:false`. In questo modo non verrà più mostrata nei cicli `for..in`, propriò come la funzione integrata definita da JavaScript:
165+
Se non è ciò che ci aspettiamo, possiamo impostare l'attributo `enumerable:false`. In questo modo non verrà più mostrata nei cicli `for..in`, proprio come la funzione già integrata (definita da Javascript):
166166

167167
```js run
168168
let user = {
@@ -192,11 +192,11 @@ alert(Object.keys(user)); // name
192192

193193
## Non-configurable
194194

195-
L'attributo non-configurable (`configurable:false`), talvolta è preimpostato negli gli oggetti e nelle proprietà integrate.
195+
L'attributo non-configurable (`configurable:false`) è talvolta preimpostato negli oggetti e nelle proprietà integrate.
196196

197-
Una proprietà non-configurable non può essere cancellata.
197+
Una proprietà *non-configurable* non può essere cancellata.
198198

199-
Ad esempio, `Math.PI` è non-writable, non-enumerable e non-configurable:
199+
Ad esempio, `Math.PI` è *non-writable*, *non-enumerable* e *non-configurable*:
200200

201201
```js run
202202
let descriptor = Object.getOwnPropertyDescriptor(Math, 'PI');
@@ -211,25 +211,25 @@ alert( JSON.stringify(descriptor, null, 2 ) );
211211
}
212212
*/
213213
```
214-
Quindi, uno sviluppatore, non sarà in grado di cambiare il valore `Math.PI` o sovrascriverlo.
214+
Quindi, uno sviluppatore non sarà in grado di cambiare il valore `Math.PI` o di sovrascriverlo.
215215

216216
```js run
217217
Math.PI = 3; // Error
218218

219219
// non si potrebbe comunque cancellare Math.PI
220220
```
221221

222-
Rendere una proprietà non-configurable è una "strada a senso unico". Non possiamo tornare indietro con `defineProperty`.
222+
Rendere una proprietà *non-configurable* è una "strada a senso unico". Non possiamo tornare indietro tramite `defineProperty`.
223223

224224
Per essere precisi, l'attributo non-configurable impone diverse restrizioni su `defineProperty`:
225225
1. Non possiamo modificare l'attributo `configurable`.
226226
2. Non possiamo modificare l'attributo `enumerable`.
227-
3. Non possiamo modificare l'attributo da `writable: false` a `true` (possiamo invece modificarla da `true` a `false`).
227+
3. Non possiamo modificare l'attributo da `writable: false` a `true` (possiamo invece modificarlo da `true` a `false`).
228228
4. Non possiamo modificare le funzioni di accesso `get/set` (ma possiamo assegnarle nel caso non siano definite).
229229

230230
**L'idea alla base di "configurable: false" è quella di prevenire la modifica e la rimozione degli attributi di una proprietà, permettendo comunque la modifica del suo valore.**
231231

232-
In questo esempio `user.name` è non-configurable, ma possiamo comunque modificarlo (poiché è writable):
232+
In questo esempio `user.name` è *non-configurable*, ma possiamo comunque modificarlo (poiché è *writable*):
233233

234234
```js run
235235
let user = {
@@ -300,7 +300,7 @@ Il metodo `Object.defineProperties` può essere utilizzato per clonare un ogget
300300
let clone = Object.defineProperties({}, Object.getOwnPropertyDescriptors(obj));
301301
```
302302

303-
Normalmente quando cloniamo un oggetto, utilizziamo l'assegnazione per copiarne le proprietà, come nell'esempio:
303+
Normalmente, quando cloniamo un oggetto, utilizziamo l'assegnazione per copiarne le proprietà, come nell'esempio:
304304

305305
```js
306306
for (let key in user) {
@@ -310,7 +310,7 @@ for (let key in user) {
310310

311311
...Ma in questo modo non stiamo copiando gli attributi. Quindi per una clonazione più completa, l'utilizzo di `Object.defineProperties` è la strada migliore.
312312

313-
Un'altra differenza è che `for..in` ignora le proprietà di tipo symbol, invece `Object.getOwnPropertyDescriptors` ritorna *tutti* i descrittori, inclusi quelli di tipi symbol.
313+
Un'altra differenza è che `for..in` ignora le proprietà di tipo `symbol`, mentre `Object.getOwnPropertyDescriptors` ritorna *tutti* i descrittori, inclusi quelli di tipo symbol.
314314

315315
## Sigillare un oggetto globalmente
316316

@@ -327,7 +327,7 @@ Esistono però diversi metodi in grado di limitare l'accesso *all'intero* oggett
327327
[Object.freeze(obj)](mdn:js/Object/freeze)
328328
: Vieta di aggiungere/rimuovere/modificare le proprietà dell'oggetto. Imposta `configurable: false, writable: false` su tutte le proprietà già esistenti dell'oggetto.
329329

330-
Ed esistono anche dei metodi verificare lo stato di un oggetto:
330+
Ed esistono anche dei metodi per verificare lo stato degli attributi di un oggetto:
331331

332332
[Object.isExtensible(obj)](mdn:js/Object/isExtensible)
333333
: Ritorna `false` se è vietato aggiungere nuove proprietà, altrimenti ritorna `true`.
@@ -338,4 +338,4 @@ Ed esistono anche dei metodi verificare lo stato di un oggetto:
338338
[Object.isFrozen(obj)](mdn:js/Object/isFrozen)
339339
: Ritorna `true` se è vietato aggiungere/rimuovere/modificare proprietà, e tutte le altre proprietà sono impostate a `configurable: false, writable: false`.
340340

341-
Nella pratica questi metodi sono utilizzati molto raramente.
341+
In pratica, tuttavia, questi metodi sono utilizzati molto raramente.

0 commit comments

Comments
 (0)