Skip to content

Commit efec4c1

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

File tree

5 files changed

+28
-29
lines changed

5 files changed

+28
-29
lines changed

1-js/08-prototypes/01-prototype-inheritance/2-search-algorithm/solution.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@
2727
alert( table.money ); // undefined
2828
```
2929

30-
2. Nei moderni engine, che valutano le performance, non c'è alcuna differenza tra il prelevare una proprietà dall'oggetto oppure direttamente dal suo prototype. Sono in grado di ricordare da dove è stata presa la proprietà e riutilizzarla alla prossima richiesta.
30+
2. Nei moderni engine, che valutano la performance, non c'è alcuna differenza tra il prelevare una proprietà dall'oggetto oppure direttamente dal suo prototype. Sono in grado di ricordare da dove è stata presa la proprietà e riutilizzarla alla prossima richiesta.
3131

32-
Ad esempio, per `pockets.glasses` loro ricordano dove hanno trovato `glasses` (in `head`), quindi la prossima volta la cercheranno proprio li. Sono anche abbastanza intelligenti da aggiornare la cache interna nel caso qualcosa cambi, quindi questa ottimizzazione è sicura.
32+
Ad esempio, per `pockets.glasses` ricordano dove hanno trovato `glasses` (in `head`), quindi la prossima volta la cercheranno proprio li. Sono anche abbastanza intelligenti da aggiornare la cache interna nel caso qualcosa cambi, quindi questa ottimizzazione è sicura.

1-js/08-prototypes/01-prototype-inheritance/3-proto-and-this/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
**La risposta: `rabbit`.**
22

3-
Questo accade perché `this` fa riferimento all'oggetto prima del punto, quindi `rabbit.eat()` modifica `rabbit`.
3+
Questo perché `this` fa riferimento all'oggetto prima del punto, quindi `rabbit.eat()` modifica `rabbit`.
44

55
La ricerca della proprietà e la sua esecuzione sono cose differenti.
66

1-js/08-prototypes/01-prototype-inheritance/4-hamster-proto/solution.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Guardiamo attentamente a cosa succende nella chiamata `speedy.eat("apple")`.
1+
Guardiamo attentamente cosa succede nella chiamata `speedy.eat("apple")`.
22

33
1. Il metodo `speedy.eat` viene trovato nel prototype (`=hamster`), eseguito con `this=speedy` (l'oggetto prima del punto).
44

@@ -77,4 +77,4 @@ alert( speedy.stomach ); // apple
7777
alert( lazy.stomach ); // <nothing>
7878
```
7979

80-
Una soluzione comune, tutte le proprietà che descrivono un particolare stato dell'oggetto, come `stomach`, dovrebbero essere memorizzate nell'oggetto. In questo modo eviteremo il problema.
80+
Come soluzione comune, tutte le proprietà che descrivono un particolare stato dell'oggetto, come `stomach`, dovrebbero essere memorizzate nell'oggetto. In questo modo eviteremo il problema.

1-js/08-prototypes/01-prototype-inheritance/4-hamster-proto/task.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Perché entrabi i criceti sono sazi?
5+
# Perché entrambi i criceti sono sazi?
66

77
Abbiamo due criceti: `speedy` e `lazy`, che erditano dall'oggetto `hamster`.
88

9-
Quando nutriamo uno di loro, anche l'altro è sazio. Perché? Come possiamo sistemare?
9+
Quando nutriamo uno di loro, anche l'altro è sazio. Perché? Come possiamo sistemare il problema?
1010

1111
```js run
1212
let hamster = {
@@ -32,4 +32,3 @@ alert( speedy.stomach ); // apple
3232
// Anche questo lo ha ricevuto, perché? provate a sistemarlo
3333
alert( lazy.stomach ); // apple
3434
```
35-

1-js/08-prototypes/01-prototype-inheritance/article.md

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
# Prototypal inheritance
22

3-
Nella programmazione, spesso vogliamo prendere qualcosa ed estenderlo.
3+
Nella programmazione, spesso vogliamo prendere qualcosa ed estenderla.
44

55
Ad esempio, potremmo avere un oggetto `user` con le sue proprietà e i suoi metodi, e voler definire gli oggetti `admin` e `guest` come sue varianti. Vorremmo però poter riutilizzare ciò che abbiamo nell'oggetto `user`, evitando di copiare e reimplementare nuovamente i suoi metodi, quindi vorremmo semplicemente definire un nuovo oggetto a partire da esso.
66

77
La *prototypal inheritance* (ereditarietà dei prototype) è una caratteristica del linguaggio che aiuta in questo senso.
88

99
## [[Prototype]]
1010

11-
In JavaScript, possiedono una speciale proprietà nascosta `[[Prototype]]` (come definito nella specifica), questo può valere `null` oppure può contenere il riferimento ad un altro oggetto. Quell'oggetto viene definito "prototype" (prototipo):
11+
In JavaScript, gli oggetti possiedono una speciale proprietà nascosta `[[Prototype]]` (come definito nella specifica); questo può valere `null` oppure può contenere il riferimento ad un altro oggetto. Quell'oggetto viene definito "prototype" (prototipo):
1212

1313
![prototype](object-prototype-empty.svg)
1414

15-
Quando leggiamo una proprietà da `object`, e questa non esiste, JavaScript prova automaticamente a recuperarla dal suo prototype. In programmazione, questo comportamento viene definito "prototypal inheritance". Presto vederemo diversi esempi di questo tipo di ereditarietà, e vedremo anche delle interessanti caratteristiche di linguaggio basate su di essa.
15+
Quando leggiamo una proprietà da `object`, e questa non esiste, JavaScript prova automaticamente a recuperarla dal suo prototype. In programmazione, questo comportamento viene definito "prototypal inheritance". Presto vederemo diversi esempi di questo tipo di ereditarietà, e vedremo anche delle interessanti caratteristiche del linguaggio basate su di essa.
1616

1717
La proprietà `[[Prototype]]` è interna e nascosta, ma esistono diversi modi per poterla impostare.
1818

19-
Uno di questi è quello di utilizzare la nomenclatura speciale `__proto__`, in questo modo:
19+
Uno di questi è quello di utilizzare la nomenclatura speciale `__proto__`:
2020

2121
```js run
2222
let animal = {
@@ -27,7 +27,7 @@ let rabbit = {
2727
};
2828

2929
*!*
30-
rabbit.__proto__ = animal; // imposta il prototy di rabbit,.[[Prototype]] = animal
30+
rabbit.__proto__ = animal; // imposta il prototype di rabbit,.[[Prototype]] = animal
3131
*/!*
3232
```
3333

@@ -60,7 +60,7 @@ Successivamente, quando `alert` proverà a leggere la proprietà `rabbit.eats` `
6060

6161
![](proto-animal-rabbit.svg)
6262

63-
In questo caso possiamo dire che "`animal` è il prototype di `rabbit`" o, in alternativa, che "`rabbit` prototypically inherits (eredità dal prototipo) da `animal`"
63+
In questo caso possiamo dire che "`animal` è il prototype di `rabbit`" o, in alternativa, che "`rabbit` *prototypically inherits* (eredità dal prototipo) da `animal`"
6464

6565
Quindi se `animal` possiede molte proprietà e metodi utili, questi saranno automaticamente disponibili in `rabbit`. Queste proprietà vengono definite come "ereditate".
6666

@@ -127,9 +127,9 @@ Ora, se provassimo a leggere qualcosa da `longEar`, e non esistesse, JavaScript
127127
Ci sono solamente due limitazioni:
128128

129129
1. Non possono esserci riferimenti circolari. JavaScript lancerebbe un errore se provassimo ad assegnare a `__proto__` un riferimento circolare.
130-
2. Il valore di `__proto__` può essere o un oggetto o `null`. Gli altri valore vengono ignorati.
130+
2. Il valore di `__proto__` può essere o un oggetto o `null`. Gli altri valori vengono ignorati.
131131

132-
Inoltre, anche se dovrebbe essere già ovvio: può esserci solamente un `[[Prototype]]`. Un oggetto non può eridatare da più oggetti.
132+
Inoltre, anche se dovrebbe essere già ovvio: può esserci solamente un `[[Prototype]]`. Un oggetto non può ereditare da più oggetti.
133133

134134

135135
```smart header="`__proto__` è un getter/setter storico per `[[Prototype]]`"
@@ -141,7 +141,7 @@ La proprietà `__proto__` è leggermente datata. Esiste solamente per ragioni st
141141

142142
Secondo la specifica, `__proto__` deve essere supportato solamente dai browser. In realtà, tutti gli ambienti, inclusi quelli server-side, supportano `__proto__`, quindi il suo utilizzo è piuttosto sicuro.
143143

144-
Poichè la notazione `__proto__` risulta essere più intuitiva, la utilizzeremo nei nostri esempi.
144+
Poiché la notazione `__proto__` risulta essere più intuitiva, la utilizzeremo nei nostri esempi.
145145
```
146146
147147
## La scrittura non utilizza prototype
@@ -150,7 +150,7 @@ Il prototype viene utilizzato solamente per la lettura delle proprietà.
150150
151151
Le operazioni di scrittura/rimozione utilizzano direttamente l'oggetto.
152152
153-
Nell'esempio che vediamo sotto, assegniamo un suo metodo `walk` a `rabbit`:
153+
Nell'esempio che vediamo sotto, assegniamo un metodo `walk` a `rabbit`, che sarà solo suo:
154154
155155
```js run
156156
let animal = {
@@ -209,21 +209,21 @@ alert(admin.fullName); // Alice Cooper, lo stato di admin è stato modificato
209209
alert(user.fullName); // John Smith, lo stato di user è protetto
210210
```
211211

212-
Nell'esempio in linea `(*)` la proprietà `admin.fullName` possiede un getter nel prototype `user`, quindi viene invocato. In linea `(**)` la proprietà ha un setter nel prototype, che viene quindi invocato.
212+
Nell'esempio in linea `(*)` la proprietà `admin.fullName` ha un getter nel prototype `user`, quindi viene invocato. In linea `(**)` la proprietà ha un setter nel prototype, che viene quindi invocato.
213213

214214
## Il valore di "this"
215215

216-
Dall'esempio sopra potrebbe sorgere una domanda interessante: qual'è il valore di `this` all'interno `set fullName(value)`? Dove vengono scritte le proprietà `this.name` e `this.surname`: in `user` o `admin`?
216+
Dall'esempio sopra potrebbe sorgere una domanda interessante: qual è il valore di `this` all'interno `set fullName(value)`? Dove vengono scritte le proprietà `this.name` e `this.surname`: in `user` o `admin`?
217217

218218
La risposta è semplice: `this` non viene influenzato dai prototype.
219219

220-
**Non ha importanza dove viene trovato il metodo: nell'oggetto o in un suo prototupe. Quando invochiamo un metodo, `this` fa sempre riferimento all'oggetto che precede il punto.**
220+
**Non ha importanza dove viene trovato il metodo: nell'oggetto o in un suo prototype. Quando invochiamo un metodo, `this` fa sempre riferimento all'oggetto che precede il punto.**
221221

222222
Quindi, l'invocazione del setter `admin.fullName=` utilizza `admin` come `this`, non `user`.
223223

224-
Questo è molto importante, poiché potremmo avere un oggetto molto grande con molti metodi, e avere diversi oggetti che ereditano da esso. Quando gli oggetti che ereditano, eseguono un metodo ereditato, andranno a modificare solamente il loro stato, non quello dell'oggetto principale.
224+
Questo è molto importante, poiché potremmo avere un oggetto molto grande con molti metodi, e avere diversi oggetti che ereditano da esso. Quando gli oggetti che ereditano eseguono un metodo ereditato, andranno a modificare solamente il loro stato, non quello dell'oggetto principale da cui ereditano.
225225

226-
Ad esempio, qui `animal` rappresenta un "memorizzato di metodi", che `rabbit` utilizza.
226+
Ad esempio, qui `animal` rappresenta un "archivio di metodi", che `rabbit` utilizza.
227227

228228
La chiamata `rabbit.sleep()` imposta `this.isSleeping` nell'oggetto `rabbit`:
229229

@@ -256,9 +256,9 @@ Il risultato:
256256

257257
![](proto-animal-rabbit-walk-3.svg)
258258

259-
Se avessimo altri oggetti, come `bird`, `snake`, etc., che ereditano da `animal`, avrebbero a loro volta accesso ai metodi di `animal`. In ogni caso, `this` all'interno della chiamata, farebbere riferimento all'oggetto corrispondente, che viene valutato al momento dell'invocazione (appena prima del punto), e non ad `animal`. Quindi quando scriviamo dati utilizzando `this`, questi verranno memorizzati nell'oggetto corrispondente.
259+
Se avessimo altri oggetti, come `bird`, `snake`, etc., che ereditano da `animal`, avrebbero a loro volta accesso ai metodi di `animal`. In ogni caso, `this` all'interno della chiamata farebbe riferimento all'oggetto corrispondente, che viene valutato al momento dell'invocazione (appena prima del punto), e non ad `animal`. Quindi quando scriviamo dati utilizzando `this`, questi verranno memorizzati nell'oggetto corrispondente.
260260

261-
Come risultato otteniamo che dei metodi condivisi, mentre lo stato degli oggetti non lo è.
261+
Come risultato i metodi sono condivisi, mentre lo stato degli oggetti non lo è.
262262

263263
## Il ciclo for..in
264264

@@ -282,14 +282,14 @@ alert(Object.keys(rabbit)); // jumps
282282
*/!*
283283

284284
*!*
285-
// il ciclo for..in itera sia le proprietà di rabbi, che quelle ereditate da animal
285+
// il ciclo for..in itera sia le proprietà di rabbit, che quelle ereditate da animal
286286
for(let prop in rabbit) alert(prop); // jumps, then eats
287287
*/!*
288288
```
289289

290-
Se questo non è ciò che ci aspettiamo, e voglia escludere le proprietà ereditate, esiste un metodo integrato [obj.hasOwnProperty(key)](mdn:js/Object/hasOwnProperty): ritorna `true` se `obj` possiede la proprietà `key` come non ereditata (propria).
290+
Se questo non è ciò che ci aspettiamo, e voglia escludere le proprietà ereditate, esiste un metodo integrato [obj.hasOwnProperty(key)](mdn:js/Object/hasOwnProperty): ritorna `true` se `obj` possiede la propria proprietà `key` (non ereditata).
291291

292-
Quindi possiamo filtrare le proprietà ereditate (o farci qualcos altro):
292+
Quindi possiamo filtrare le proprietà ereditate (o farci qualcos'altro):
293293

294294
```js run
295295
let animal = {
@@ -334,6 +334,6 @@ Questi metodi lavorano solamente sull'oggetto stesso. Le proprietà di prototype
334334
- Possiamo utilizzare `obj.__proto__` per accedervi (una proprietà getter/setter storica, ci sono altri modi che vederemo presto).
335335
- L'oggetto a cui fa riferimento `[[Prototype]]` viene chiamato "prototype".
336336
- Se vogliamo leggere una proprietà di `obj` o invocare un metodo, ma questo non esiste, allora JavaScript andrà a cercarlo nel prototype.
337-
- Le operazioni di scrittrua/rimozione agiscono direttamente nell'oggetto, non utilizzano il prototype (assumendo che questa sia una proprietà e non un setter).
337+
- Le operazioni di scrittura/rimozione agiscono direttamente sull'oggetto, non utilizzano il prototype (assumendo che questa sia una proprietà e non un setter).
338338
- Se invochiamo `obj.method()`, e il `method` viene prelevato dal prototype, `this` farà comunque riferimento a `obj`. Quindi i metodi lavoreranno sempre con l'oggetto corrente, anche se questi sono ereditati.
339339
- Il ciclo `for..in` itera sia le proprietà dell'oggetto che quelle ereditate. Tutti gli altri metodi di tipo getter key/value operano solamente sull'oggetto stesso.

0 commit comments

Comments
 (0)