Skip to content

Commit 25dbab4

Browse files
authored
Prototypal inheritance
Prototypal inheritance
2 parents 1c4c671 + a05ed54 commit 25dbab4

File tree

9 files changed

+123
-124
lines changed

9 files changed

+123
-124
lines changed
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11

2-
1. `true`, taken from `rabbit`.
3-
2. `null`, taken from `animal`.
4-
3. `undefined`, there's no such property any more.
2+
1. `true`, preso da `rabbit`.
3+
2. `null`, preso da `animal`.
4+
3. `undefined`, non esiste più quella proprietà.

1-js/08-prototypes/01-prototype-inheritance/1-property-after-delete/task.md

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

33
---
44

5-
# Working with prototype
5+
# Lavorare con prototype
66

7-
Here's the code that creates a pair of objects, then modifies them.
7+
Il seguente codice crea due oggetti, e successivamente li modifica.
88

9-
Which values are shown in the process?
9+
Quali valori vengono mostrati nel processo?
1010

1111
```js
1212
let animal = {
@@ -28,4 +28,4 @@ delete animal.jumps;
2828
alert( rabbit.jumps ); // ? (3)
2929
```
3030

31-
There should be 3 answers.
31+
Dovrebbero esserci 3 risposte.

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

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

2-
1. Let's add `__proto__`:
2+
1. Aggiungiamo `__proto__`:
33

44
```js run
55
let head = {
@@ -27,6 +27,6 @@
2727
alert( table.money ); // undefined
2828
```
2929

30-
2. In modern engines, performance-wise, there's no difference whether we take a property from an object or its prototype. They remember where the property was found and reuse it in the next request.
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-
For instance, for `pockets.glasses` they remember where they found `glasses` (in `head`), and next time will search right there. They are also smart enough to update internal caches if something changes, so that optimization is safe.
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/2-search-algorithm/task.md

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

33
---
44

5-
# Searching algorithm
5+
# Algoritmo di ricerca
66

7-
The task has two parts.
7+
Il task è suddiviso in due parti.
88

9-
Given the following objects:
9+
Dati i seguenti oggetti:
1010

1111
```js
1212
let head = {
@@ -27,5 +27,5 @@ let pockets = {
2727
};
2828
```
2929

30-
1. Use `__proto__` to assign prototypes in a way that any property lookup will follow the path: `pockets` -> `bed` -> `table` -> `head`. For instance, `pockets.pen` should be `3` (found in `table`), and `bed.glasses` should be `1` (found in `head`).
31-
2. Answer the question: is it faster to get `glasses` as `pockets.glasses` or `head.glasses`? Benchmark if needed.
30+
1. Utilizza `__proto__` per assegnare il prototypes in modo che la catena segua il percorso: `pockets` -> `bed` -> `table` -> `head`. Ad esempio, `pockets.pen` dovrebbe essere `3` (in `table`), e `bed.glasses` dovrebbe essere `1` (in `head`).
31+
2. Rispondi alla domanda: è più veloce ottenere `glasses` come `pockets.glasses` o come `head.glasses`? Eseguite test se necessario.
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
**The answer: `rabbit`.**
1+
**La risposta: `rabbit`.**
22

3-
That's because `this` is an object before the dot, so `rabbit.eat()` modifies `rabbit`.
3+
Questo perché `this` fa riferimento all'oggetto prima del punto, quindi `rabbit.eat()` modifica `rabbit`.
44

5-
Property lookup and execution are two different things.
5+
La ricerca della proprietà e la sua esecuzione sono cose differenti.
66

7-
The method `rabbit.eat` is first found in the prototype, then executed with `this=rabbit`.
7+
Il metodo `rabbit.eat` viene prima cercato nel prototype, e successivamente eseguito con `this=rabbit`.

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

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

33
---
44

5-
# Where does it write?
5+
# Dove andrà a scrivere?
66

7-
We have `rabbit` inheriting from `animal`.
7+
Abbiamo un oggetto `rabbit` che eredita da `animal`.
88

9-
If we call `rabbit.eat()`, which object receives the `full` property: `animal` or `rabbit`?
9+
Se invochiamo `rabbit.eat()`, quale oggetto riceverà la proprietà `full`: `animal` o `rabbit`?
1010

1111
```js
1212
let animal = {

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

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
Let's look carefully at what's going on in the call `speedy.eat("apple")`.
1+
Guardiamo attentamente cosa succede nella chiamata `speedy.eat("apple")`.
22

3-
1. The method `speedy.eat` is found in the prototype (`=hamster`), then executed with `this=speedy` (the object before the dot).
3+
1. Il metodo `speedy.eat` viene trovato nel prototype (`=hamster`), eseguito con `this=speedy` (l'oggetto prima del punto).
44

5-
2. Then `this.stomach.push()` needs to find `stomach` property and call `push` on it. It looks for `stomach` in `this` (`=speedy`), but nothing found.
5+
2. Successivamente `this.stomach.push()` deve trovare la proprietà `stomach` ed invocare `push`. Cerca `stomach` in `this` (`=speedy`), ma non trova nulla.
66

7-
3. Then it follows the prototype chain and finds `stomach` in `hamster`.
7+
3. Allora segue la catena del prototype e trova `stomach` in `hamster`.
88

9-
4. Then it calls `push` on it, adding the food into *the stomach of the prototype*.
9+
4. Invoca `push` in `hamster`, aggiungendo il cibo nello *stomaco del prototype*.
1010

11-
So all hamsters share a single stomach!
11+
Quindi tutti i criceti condividono un unico stomaco!
1212

13-
Both for `lazy.stomach.push(...)` and `speedy.stomach.push()`, the property `stomach` is found in the prototype (as it's not in the object itself), then the new data is pushed into it.
13+
Per entrambi `lazy.stomach.push(...)` e `speedy.stomach.push()`, la proprietà `stomach` viene trovata nel prototype (poiché non si trova negli oggetti), quindi i cambiamenti avvengono li.
1414

15-
Please note that such thing doesn't happen in case of a simple assignment `this.stomach=`:
15+
Da notare che questo non accade nel caso di una semplice assegnazione `this.stomach=`:
1616

1717
```js run
1818
let hamster = {
1919
stomach: [],
2020

2121
eat(food) {
2222
*!*
23-
// assign to this.stomach instead of this.stomach.push
23+
// assegnamo a this.stomach invece di this.stomach.push
2424
this.stomach = [food];
2525
*/!*
2626
}
@@ -34,17 +34,17 @@ let lazy = {
3434
__proto__: hamster
3535
};
3636

37-
// Speedy one found the food
37+
// Speedy trova il cibo
3838
speedy.eat("apple");
3939
alert( speedy.stomach ); // apple
4040

41-
// Lazy one's stomach is empty
41+
// lo stomaco di Lazy è vuoto
4242
alert( lazy.stomach ); // <nothing>
4343
```
4444

45-
Now all works fine, because `this.stomach=` does not perform a lookup of `stomach`. The value is written directly into `this` object.
45+
Ora tutto funziona bene, perché `this.stomach=` non deve andare alla ricerca di `stomach`. Il valore è scritto direttamente nell'oggetto `this`.
4646

47-
Also we can totally avoid the problem by making sure that each hamster has their own stomach:
47+
Possiamo anche evitare completamente il problema, facendo in modo che ogni criceto abbia il suo stomaco:
4848

4949
```js run
5050
let hamster = {
@@ -69,12 +69,12 @@ let lazy = {
6969
*/!*
7070
};
7171

72-
// Speedy one found the food
72+
// Speedy trova il cibo
7373
speedy.eat("apple");
7474
alert( speedy.stomach ); // apple
7575

76-
// Lazy one's stomach is empty
76+
// lo stomaco di Lazy è vuoto
7777
alert( lazy.stomach ); // <nothing>
7878
```
7979

80-
As a common solution, all properties that describe the state of a particular object, like `stomach` above, should be written into that object. That prevents such problems.
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: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 5
22

33
---
44

5-
# Why are both hamsters full?
5+
# Perché entrambi i criceti sono sazi?
66

7-
We have two hamsters: `speedy` and `lazy` inheriting from the general `hamster` object.
7+
Abbiamo due criceti: `speedy` e `lazy`, che ereditano dall'oggetto `hamster`.
88

9-
When we feed one of them, the other one is also full. Why? How can we fix it?
9+
Quando nutriamo uno di loro, anche l'altro è sazio. Perché? Come possiamo sistemare il problema?
1010

1111
```js run
1212
let hamster = {
@@ -25,11 +25,10 @@ let lazy = {
2525
__proto__: hamster
2626
};
2727

28-
// This one found the food
28+
// Questo ha trovato il cibo
2929
speedy.eat("apple");
3030
alert( speedy.stomach ); // apple
3131

32-
// This one also has it, why? fix please.
32+
// Anche questo lo ha ricevuto, perché? provate a sistemarlo
3333
alert( lazy.stomach ); // apple
3434
```
35-

0 commit comments

Comments
 (0)