|
1 | 1 | # Native prototypes |
2 | 2 |
|
3 | | -La proprietà `"prototype"` viene largamente utilizzate da JavaScript stesso. Tutti i costruttori integrati ne fanno uso. |
| 3 | +La proprietà `"prototype"` viene largamente utilizzata da JavaScript stesso. Tutti i costruttori integrati ne fanno uso. |
4 | 4 |
|
5 | | -Come prima cosa andremo ad analizzare questa proprietà nel dettaglio, in un secondo momento vedremo come utilizzarla per aggiungere nuove funzionalità agli oggetti integrati. |
| 5 | +Come prima cosa andremo ad analizzare questa proprietà nel dettaglio; in un secondo momento vedremo come utilizzarla per aggiungere nuove funzionalità agli oggetti integrati. |
6 | 6 |
|
7 | 7 | ## Object.prototype |
8 | 8 |
|
9 | | -Ipotizziamo di stampare un oggetto vuoto: |
| 9 | +Ipotizziamo di dover mostrare un oggetto vuoto: |
10 | 10 |
|
11 | 11 | ```js run |
12 | 12 | let obj = {}; |
@@ -46,9 +46,9 @@ alert(Object.prototype.__proto__); // null |
46 | 46 |
|
47 | 47 | ## Altri prototypes integrati |
48 | 48 |
|
49 | | -Altri oggetti integrati, come `Array`, `Date`, `Function` ed altri, mantengono i metodi in prototypes. |
| 49 | +Altri oggetti integrati, come `Array`, `Date`, `Function` ed altri, hanno i propri metodi in prototypes. |
50 | 50 |
|
51 | | -Ad esempio, quando creiamo un array `[1, 2, 3]`, il costruttore di default `new Array()` viene invocato internamente. Quindi `Array.prototype` diventa il suo prototipo e ne fonisce i suoi metodi. Questo comportamento rende l'utilizzo della memoria molto efficiente. |
| 51 | +Ad esempio, quando creiamo un array `[1, 2, 3]`, il costruttore di default `new Array()` viene invocato internamente. Quindi `Array.prototype` ne diventa il prototipo e fonisce i suoi metodi. Questo comportamento rende l'utilizzo della memoria molto efficiente. |
52 | 52 |
|
53 | 53 | Come definito nella specifica, tutti i prototype integrati hanno `Object.prototype` in cima. Questo è il motivo per cui alcune persone dicono che "tutto deriva dagli oggetti". |
54 | 54 |
|
@@ -94,24 +94,24 @@ Gli altri ogetti integrati funzionano allo stesso modo. Anche le funzioni -- poi |
94 | 94 | function f() {} |
95 | 95 |
|
96 | 96 | alert(f.__proto__ == Function.prototype); // true |
97 | | -alert(f.__proto__.__proto__ == Object.prototype); // true, eredità da objects |
| 97 | +alert(f.__proto__.__proto__ == Object.prototype); // true, eredita da objects |
98 | 98 | ``` |
99 | 99 |
|
100 | 100 | ## Primitivi |
101 | 101 |
|
102 | 102 | La situazione è molto più complessa con strings, numbers e booleans. |
103 | 103 |
|
104 | | -Come abbiamo già visto, questi non sono oggetti. Ma se proviamo ad accedere alle loro proprietà, viene creato un oggetto temporaneo utilizzando i rispettivi costruttori `String`, `Number` e `Boolean`. Forniscono i metodi e poi spariscono. |
| 104 | +Come abbiamo già visto, questi non sono oggetti. Ma se proviamo ad accedere alle loro proprietà, viene creato un oggetto temporaneo utilizzando i rispettivi costruttori `String`, `Number` e `Boolean`. Essi forniscono metodi e poi spariscono. |
105 | 105 |
|
106 | | -Questi oggetti vengono creati di "nascosto" e in realtà molti motori ottimizzano il loro utilizzo, ma la specifica li descrive in questo modo. I metodi di questi oggetti sono memorizzati proprietà prototype, e sono disponibili tramite `String.prototype`, `Number.prototype` e `Boolean.prototype`. |
| 106 | +Questi oggetti vengono creati di "nascosto" e in realtà molti motori ottimizzano il loro utilizzo, ma la specifica li descrive in questo modo. I metodi di questi oggetti sono memorizzati in proprietà del loro prototype, e sono disponibili tramite `String.prototype`, `Number.prototype` e `Boolean.prototype`. |
107 | 107 |
|
108 | 108 | ```warn header="I valori `null` e `undefined` non possiedono degli oggetti che li contengono" |
109 | | -I valori speciali `null` e `undefined` si comportano diversamente. Non possiedono degli oggetti contenitori, quindi non avremmo a disposizione le proprietà e i metodi. E non avremmo nemmeno propotype corrispondente. |
| 109 | +I valori speciali `null` e `undefined` si comportano diversamente. Non possiedono degli oggetti contenitori, quindi non avremmo a disposizione proprietà e metodi. E non avremmo nemmeno il propotype corrispondente. |
110 | 110 | ``` |
111 | 111 |
|
112 | 112 | ## Modificare i native prototypes [#native-prototype-change] |
113 | 113 |
|
114 | | -I Nntive prototypes possono essere modificati. Ad esempio, se aggiungiamo il metodo `String.prototype`, e questo diventa disponibile a tutte le string: |
| 114 | +I Native prototypes possono essere modificati. Ad esempio, se aggiungiamo il metodo `String.prototype`, questo diventa disponibile a tutte le string: |
115 | 115 |
|
116 | 116 | ```js run |
117 | 117 | String.prototype.show = function() { |
@@ -155,9 +155,9 @@ alert( "La".repeat(3) ); // LaLaLa |
155 | 155 | ``` |
156 | 156 |
|
157 | 157 |
|
158 | | -## Prendere in prestito da prototypes |
| 158 | +## Prendere in prestito dai prototypes |
159 | 159 |
|
160 | | -Nel capitolo <info:call-apply-decorators#method-borrowing> abbiamo parlato di come "prendere in prestito" i metodi. |
| 160 | +Nel capitolo <info:call-apply-decorators#method-borrowing> abbiamo parlato di come "prendere in prestito" metodi. |
161 | 161 |
|
162 | 162 | Questo avviene quando prendiamo un metodo da un oggetto e lo copiamo in un altro. |
163 | 163 |
|
@@ -195,4 +195,4 @@ La pratica di "prendere in prestito" i metodi è flessibile, consente di eredita |
195 | 195 | - I metodi vengono memorizzati nel prototype (`Array.prototype`, `Object.prototype`, `Date.prototype`, etc.) |
196 | 196 | - L'oggetto memorizza solamente i dati (gli elementdi dell'array, le proprietà dell'object, la data) |
197 | 197 | - I tipi di dato primitivi memorizzano i metodi nel prototype, utilizzando degli oggetti "contenitori": `Number.prototype`, `String.prototype` e `Boolean.prototype`. Fanno eccezione `undefined` e `null` che non possiedono alcun oggetto contenitore. |
198 | | -- I prototype integrati possono essere modificati o popolati con nuovi metodi. Ma questa, è una pratica sconsigliata. L'unico caso in cui è accettabile aggiungere nuovi metodi, è per fornire l'implementazione di funzionalità definite nella specifica JavaScript, agli engines che ancora non le supportano. |
| 198 | +- I prototype integrati possono essere modificati o popolati con nuovi metodi. Ma questa è una pratica sconsigliata. L'unico caso in cui è accettabile aggiungere nuovi metodi è per fornire l'implementazione di funzionalità definite nella specifica JavaScript agli engines che ancora non le supportano. |
0 commit comments