Skip to content

Commit 09cac43

Browse files
longo-andreapasor1
andauthored
Apply suggestions from code review
Co-authored-by: Simone Pasini <66781510+pasor1@users.noreply.github.com>
1 parent e345001 commit 09cac43

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

1-js/09-classes/06-instanceof/article.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
L'operatore `instanceof` ci consente di verificare se un oggetto appartiene ad una specifica classe. Anche l'ereditarietà viene presa in considerazione.
44

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.
66

77
## L'operatore instanceof [#ref-instanceof]
88

@@ -48,14 +48,14 @@ Da notare che `arr` appartiene anche alla classe `Object`. Questo accade perché
4848

4949
Normalmente `instanceof` esamina la catena dei prototype per effettuare questa verifica. Possiamo anche definire una logica personalizzata nel metodo statico `Symbol.hasInstance`.
5050

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:
5252

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`.
5454

5555
For example:
5656

5757
```js run
58-
// impostiamo il controllo instanceOf in modo che supponga che
58+
// impostiamo il controllo instanceOf in modo che assuma che
5959
// qualsiasi cosa con la proprietà canEat sia un animale
6060
class Animal {
6161
static [Symbol.hasInstance](obj) {
@@ -77,10 +77,10 @@ L'algoritmo di `obj instanceof Class` funzione, a grandi linee, in questo modo:
7777
obj.__proto__.__proto__.__proto__ === Class.prototype?
7878
...
7979
// 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
8181
```
8282

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.
8484
8585
In caso di ereditarietà, il riscontro avverrà al secondo passo:
8686
@@ -105,7 +105,7 @@ Qui vediamo raffigurato cosa `rabbit instanceof Animal` confronta con `Animal.pr
105105
106106
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)`.
107107
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.
109109
110110
Questo può portare a diverse conseguenze quando la proprietà `prototype` viene modificata dopo la creazione dell'oggetto.
111111

@@ -162,7 +162,7 @@ alert( objectToString.call(arr) ); // [object *!*Array*/!*]
162162

163163
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`.
164164

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:
166166

167167
```js run
168168
let s = Object.prototype.toString;
@@ -199,7 +199,7 @@ alert( {}.toString.call(new XMLHttpRequest()) ); // [object XMLHttpRequest]
199199
200200
Come potete vedere, il risultato è esattamente `Symbol.toStringTag` (se esiste), racchiuso in `[object ...]`.
201201
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.
203203
204204
Possiamo utilizzare `{}.toString.call` piuttosto di `instanceof` per gli oggetti integrati quando vogliamo ottenerne il tipo come stringa invece di effettuare una semplice verifica.
205205
@@ -215,4 +215,4 @@ Ricapitoliamo i metodi di verifica del tipi:
215215
216216
Come possiamo vedere, `{}.toString` è tecnicamente più avanzato di `typeof`.
217217
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

Comments
 (0)