You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/09-classes/06-instanceof/article.md
+10-10Lines changed: 10 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
L'operatore `instanceof` ci consente di verificare se un oggetto appartiene ad una specifica classe. Anche l'ereditarietà viene presa in considerazione.
4
4
5
-
Questo tipo di verifiche potrebbero essere necessarie in diversi casi. Ad esempio, può essere utilizzato per costruire una funzione *polimorfa*, una funzione che tratta gli argomenti differentemente in base al loro tipo.
5
+
Questo tipo di controllo potrebbe essere necessario in diversi casi. Ad esempio, può essere utilizzato per costruire una funzione *polimorfa*, ossia una funzione che tratta gli argomenti differentemente in base al loro tipo.
6
6
7
7
## L'operatore instanceof [#ref-instanceof]
8
8
@@ -48,14 +48,14 @@ Da notare che `arr` appartiene anche alla classe `Object`. Questo accade perché
48
48
49
49
Normalmente `instanceof` esamina la catena dei prototype per effettuare questa verifica. Possiamo anche definire una logica personalizzata nel metodo statico `Symbol.hasInstance`.
50
50
51
-
L'algoritmo di `obj instanceof Class`funzione, a grandi linee, in questo modo:
51
+
L'algoritmo di `obj instanceof Class`funziona, a grandi linee, in questo modo:
52
52
53
-
1. Se è stato definito un metodo statico `Symbol.hasInstance`, allora questo verrà invocato: `Class[Symbol.hasInstance](obj)`. Dovrebbe ritornare `true` o `false`, questo è tutto. Così possiamo personalizzare il comportamento di `instanceof`.
53
+
1. Se è stato definito un metodo statico `Symbol.hasInstance`, allora questo verrà invocato: `Class[Symbol.hasInstance](obj)`. Dovrebbe ritornare `true` o `false`, questo è tutto. In questo modo possiamo personalizzare il comportamento di `instanceof`.
54
54
55
55
For example:
56
56
57
57
```js run
58
-
// impostiamo il controllo instanceOf in modo che supponga che
58
+
// impostiamo il controllo instanceOf in modo che assuma che
59
59
// qualsiasi cosa con la proprietà canEat sia un animale
60
60
classAnimal {
61
61
static [Symbol.hasInstance](obj) {
@@ -77,10 +77,10 @@ L'algoritmo di `obj instanceof Class` funzione, a grandi linee, in questo modo:
// se una di questa è true, allora viene ritornato true
80
-
// altrimenti, se siamo arrivati al termine della catena, ritorna false
80
+
// altrimenti, una volta arrivati al termine della catena, ritorna false
81
81
```
82
82
83
-
Nell'esempio sopra `rabbit.__proto__ === Rabbit.prototype`, che ci ritorna una risposta immediata.
83
+
Nell'esempio sopra `rabbit.__proto__ === Rabbit.prototype`, quindi riceviamo immediatamente una risposta.
84
84
85
85
In caso di ereditarietà, il riscontro avverrà al secondo passo:
86
86
@@ -105,7 +105,7 @@ Qui vediamo raffigurato cosa `rabbit instanceof Animal` confronta con `Animal.pr
105
105
106
106
Comunque, abbiamo a disposizione anche il metodo [objA.isPrototypeOf(objB)](mdn:js/object/isPrototypeOf), che ritorna `true` se `objA` si trova nella catena dei prototype di `objB`. Quindi la verifica `obj instanceof Class` può essere riformulata come `Class.prototype.isPrototypeOf(obj)`.
107
107
108
-
Un fatto divertente, è che il costruttore della `Class` stessa, non viene coinvolto nella verifica! Solamente la catena dei prototype e `Class.prototype` vengono valutati.
108
+
Un fatto divertente, è che il costruttore stesso della `Class`, non viene coinvolto nella verifica! Solamente la catena dei prototype e `Class.prototype` vengono valutati.
109
109
110
110
Questo può portare a diverse conseguenze quando la proprietà `prototype` viene modificata dopo la creazione dell'oggetto.
Qui abbiamo utilizzato [call](mdn:js/function/call) come descritto nel capitolo [](info:call-apply-decorators) per eseguire la funzione `objectToString` nel contesto `this=arr`.
164
164
165
-
Internamente, l'algoritmo `toString` esamina `this` e ritorna il risultato corrispondente. Più esempi:
165
+
Internamente, l'algoritmo `toString` esamina `this` e ritorna il risultato corrispondente. Altri esempi:
Come potete vedere, il risultato è esattamente `Symbol.toStringTag` (se esiste), racchiuso in `[object ...]`.
201
201
202
-
Al termine avremo "typeof on steroids" che non funziona solamente con i tipi di dato primitivo, ma anche con gli oggetti integrati e può anche essere personalizzato.
202
+
Al termine avremo "typeof on steroids" che non funziona solamente con i tipi di dato primitivo, ma anche con gli oggetti integrati, inoltre può essere personalizzato.
203
203
204
204
Possiamo utilizzare `{}.toString.call` piuttosto di `instanceof` per gli oggetti integrati quando vogliamo ottenerne il tipo come stringa invece di effettuare una semplice verifica.
205
205
@@ -215,4 +215,4 @@ Ricapitoliamo i metodi di verifica del tipi:
215
215
216
216
Come possiamo vedere, `{}.toString` è tecnicamente più avanzato di `typeof`.
217
217
218
-
Invece l'operatore `instanceof` funziona veramente bene quando stiamo lavorando con una gerarchia di classi e vogliamo verificare il tipo, tenendo conto dell'ereditarietà.
218
+
Invece l'operatore `instanceof` funziona veramente bene quando lavoriamo con una classe e vogliamo controllarne l'ereditarietà.
0 commit comments