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
Questo avviene perché le regole che impostano `this` non guardano agli oggetti letterali.
18
18
19
-
Qui il valore di `this` dentro `makeUser()` è `undefined`, perché viene chiamato come una funzione, non come un metodo.
19
+
Qui il valore di `this` dentro `makeUser()` è `undefined`, perché viene chiamato dentro una funzione, non un metodo.
20
20
21
-
E gli oggetti letterali non hanno alcun effetto su `this`. Il valore di `this` è unico per tutta la funzione, quindi i blocchi di codice e gli oggetti letterali non hanno alcuna importanza.
21
+
Gli oggetti letterali non hanno alcun effetto su `this`. Il valore di `this` è unico per tutta la funzione, quindi i blocchi di codice e gli oggetti letterali che vi si trovano dentro non hanno alcuna importanza.
22
22
23
23
Quindi `ref: this` prende il `this` della funzione.
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/04-object-methods/article.md
+24-24Lines changed: 24 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -32,13 +32,13 @@ user.sayHi = function() {
32
32
user.sayHi(); // Hello!
33
33
```
34
34
35
-
Qui abbiamo appena utilizzato unespressione di funzione per creare una funzione ed assegnarla alla proprietà `user.sayHi` dell'oggetto.
35
+
Qui abbiamo appena utilizzato un'espressione di funzione per creare una funzione ed assegnarla alla proprietà `user.sayHi` dell'oggetto.
36
36
37
-
Successivamente possiamo chiamarla. Ora l'utente potrà parlare!
37
+
Successivamente possiamo chiamarla. Ora l'utente può parlare!
38
38
39
39
Una funzione che è una proprietà di un oggetto si chiama *metodo*.
40
40
41
-
Quindi, nell'esempio abbiamo un metodo `sayHi`per l'oggetto `user`.
41
+
Quindi, nell'esempio abbiamo un metodo `sayHi`dell'oggetto `user`.
42
42
43
43
Ovviamente possiamo utilizzare una funzione già dichiarata come metodo:
44
44
@@ -70,7 +70,7 @@ OOP è una grande cosa, un ambito di interesse con i propri studi. Come sceglier
70
70
Esiste una sintassi più breve per i metodi in un oggetto letterale:
71
71
72
72
```js
73
-
// questi oggetti sono la stessa cosa
73
+
// questi oggetti fanno la stessa cosa
74
74
75
75
user = {
76
76
sayHi:function() {
@@ -90,11 +90,11 @@ user = {
90
90
91
91
Come possiamo notare, si può omettere `"function"` e scrivere solamente `sayHi()`.
92
92
93
-
A dire la verità, la notazione non è proprio uguale. Ci sono delle sottili differenze legate all'ereditarietà degli oggetti (le studieremo più avanti), per ora non hanno importanza. Nella maggior parte dei casi la forma breve viene preferita.
93
+
A dire la verità, la notazione non è proprio uguale. Ci sono delle sottili differenze legate all'ereditarietà degli oggetti (le studieremo più avanti), ma per ora non hanno importanza. Nella maggior parte dei casi la forma breve viene preferita.
94
94
95
95
## "this" nei metodi
96
96
97
-
E' molto comune cheun metodo abbia necessità di accedere alle informazioni memorizzate nell'oggetto, per eseguire determinate azioni.
97
+
E' molto comune che, per eseguire determinate azioni, un metodo abbia necessità di accedere alle informazioni memorizzate nell'oggetto.
98
98
99
99
Ad esempio, il codice dentro `user.sayHi()` potrebbe aver bisogno del nome dell'`user`.
100
100
@@ -121,9 +121,9 @@ let user = {
121
121
user.sayHi(); // John
122
122
```
123
123
124
-
Quindi in fase di esecuzione quando viene chiamato il metodo `user.sayHi()`, il valore di `this` sarà `user`.
124
+
In fase di esecuzione, quando viene chiamato il metodo `user.sayHi()`, il valore di `this` sarà `user`.
125
125
126
-
Tecnicamente, è possibile accedere all'oggetto anche senza `this`, tramite riferimento come variabile esterna:
126
+
Tecnicamente, è possibile accedere all'oggetto anche senza `this`; lo si fa tramite riferimento alla variabile esterna:
127
127
128
128
```js
129
129
let user = {
@@ -139,9 +139,9 @@ let user = {
139
139
};
140
140
```
141
141
142
-
...Questo codice è instabile. Se decidessimo di copiare `user` in un'altra variabile, ad esempio `admin = user` e sovrascrivere `user` con qualcos'altro, allora verrebbe effettuato l'accesso all'oggetto sbagliato.
142
+
...Questo codice è instabile. Se decidessimo di copiare `user` in un'altra variabile, ad esempio `admin = user` e sovrascrivere `user` con qualcos'altro, verrebbe allora effettuato l'accesso all'oggetto sbagliato.
143
143
144
-
Lo dimostriamo:
144
+
Dimostriamolo:
145
145
146
146
```js run
147
147
let user = {
@@ -169,7 +169,7 @@ Se scriviamo `this.name` piuttosto di `user.name` all'interno di `alert`, il cod
169
169
170
170
## "this" non ha limiti
171
171
172
-
In JavaScript, la parola chiave "this" si comporta diversamente da molti altri linguaggi di programmazione. Essa può essere usata in qualsiasi funzione, anche se non si tratta di un metodo di un oggetto.
172
+
In JavaScript, la parola chiave "this" si comporta diversamente da come fa in molti altri linguaggi di programmazione. Essa può essere usata in qualsiasi funzione, anche se non si tratta del metodo di un oggetto.
173
173
174
174
Non c'è alcun errore di sintassi in un codice come questo:
175
175
@@ -179,7 +179,7 @@ function sayHi() {
179
179
}
180
180
```
181
181
182
-
Il valore di `this` viene valutato in esecuzione. E può essere un valore qualsiasi.
182
+
Il valore di `this` viene valutato al momento dell'esecuzione. E può essere un valore qualsiasi.
183
183
184
184
Ad esempio, la stessa funzione potrebbe avere diversi "this" quando viene chiamata da oggetti diversi:
admin['f'](); // Admin (il punto o le parentesi quadre forniscono entrambi accesso ai metodi - non c'è differenza)
206
206
```
207
207
208
-
La regola è semplice: se viene chiamato `obj.f()`, allora`this` vale `obj`durante la chiamata di `f`. Quindi nell'esempio sopra assume il valore sia di `user` che di `admin`.
208
+
La regola è semplice: se viene chiamato `obj.f()`, allora, durante la chiamata di `f`, `this` si riferisce a `obj`. Nell'esempio sopra assume il valore sia di `user` che di `admin`.
209
209
210
210
````smart header="Invocazione senza un oggetto: `this == undefined`"
211
211
Possiamo anche chiamare la funzione senza un oggetto:
@@ -220,22 +220,22 @@ sayHi(); // undefined
220
220
221
221
In questo caso `this` è `undefined` in modalità strict. Se tentiamo di accedere a `this.name`, ci sarà un errore.
222
222
223
-
Se non è attiva la modalità strict (quindi se ci dimentichiamo `use strict`) il valor di `this` in questo sarà *l'oggetto globale* (`window` in un browser, lo studieremo più avanti nel capitolo [](info:global-object)). Questo strano comportamento ha delle motivazioni storiche, che `"use strict"` risolve.
223
+
Se non è attiva la modalità *strict*il valore di `this` in questo caso sarà *l'oggetto globale* (`window` in un browser, lo studieremo più avanti nel capitolo [](info:global-object)). Questo strano comportamento ha delle motivazioni storiche, che `"use strict"` risolve.
224
224
225
-
Solitamente questo tipo di chiamate rappresenta un errore di programmazione. Se c'è un `this` all'interno di una funzione, ci si aspetta che sia chiamato nel contesto di un oggetto.
225
+
Solitamente questo tipo di chiamate significano un errore di programmazione. Se c'è un `this` all'interno di una funzione, ci si aspetta che sia chiamato da un oggetto.
226
226
````
227
227
228
228
```smart header="Le conseguenze della libertà di `this`"
229
-
Se avete utilizzato altri linguaggi di programmazione, probabilmente la vostra idea è di un "`this` limitato", quando viene definito un metodo in un oggetto questo avrà sempre in `this` il riferimento all'oggetto.
229
+
Se avete utilizzato altri linguaggi di programmazione, probabilmente sarete abituati all'idea di un "`this` limitato": quando viene definito un metodo in un oggetto, questo avrà sempre in `this` il riferimento all'oggetto.
230
230
231
-
In JavaScript `this` è "libero", il suo valore viene prelevato durante l'esecuzione e non dipende da dove il metodo è stato definito, ma piuttosto dall'oggetto "prima del punto".
231
+
In JavaScript `this` è "libero", il suo valore viene calcolato durante l'esecuzione e non dipende da dove il metodo è stato definito, ma piuttosto dall'oggetto "prima del punto".
232
232
233
233
Il concetto di valutare `this` durante l'esecuzione ha i suoi pregi e difetti. Da una parte una funzione può essere riutilizzata per oggetti diversi, dall'altra questa grande flessibilità può essere fonte di molti errori.
234
234
235
-
La nostra posizione non è di giudicare se questa caratteristica del linguaggio sia buona o cattiva, ma si tratta di capire come lavorare con essa sfruttandone i benefici ed evitando i problemi.
235
+
Il nostro scopo non è di giudicare se questa caratteristica del linguaggio sia buona o cattiva, ma di capire come lavorare con essa sfruttandone i benefici ed evitando i problemi.
236
236
```
237
237
238
-
## Arrow functions have no "this"
238
+
## Le arrow functions non hanno "this"
239
239
240
240
Ad esempio, qui `arrow()` usa `this` preso dal metodo esterno `user.sayHi()`:
241
241
@@ -251,18 +251,18 @@ let user = {
251
251
user.sayHi(); // Ilya
252
252
```
253
253
254
-
Questa è una speciale caratteristica delle funzioni freccia, è utile quando non vogliamo avere un ulteriore `this`, ma utilizzare quello del contesto esterno. Più avanti nel capitolo <info:arrow-functions> studieremo più in dettaglio le funzioni freccia.
254
+
Questa è una speciale caratteristica delle arrow functions; è utile quando non vogliamo avere un ulteriore `this`, ma utilizzare quello del contesto esterno. Più avanti nel capitolo <info:arrow-functions> studieremo più in dettaglio le arrow functions.
255
255
256
256
257
257
## Riepilogo
258
258
259
259
- Le funzioni che vengono memorizzate come proprietà di un oggetto vengono dette "metodi".
260
-
- I metodi consentono agli oggetti di "agire" come `object.doSomething()`.
260
+
- I metodi consentono agli oggetti di "agire", come `object.doSomething()`.
261
261
- I metodi possono riferirsi all'oggetto tramite `this`.
262
262
263
263
Il valore `this` viene definito durante l'esecuzione (run-time).
264
264
- Quando una funzione viene dichiarata, può utilizzare `this`, ma questo `this` non avrà alcun valore fino a che la funzione non verrà chiamata.
265
-
- La funzione può essere copiata in vari oggetti.
266
-
- Quando una funzione viene chiamata come "metodo": `object.method()`, il valore di `this` durante la chiamata vale `object`.
265
+
- Una funzione può essere copiata in vari oggetti.
266
+
- Quando una funzione viene chiamata come "metodo": `object.method()`, il valore di `this` durante la chiamata si riferisce a `object`.
267
267
268
-
Da notare che le funzioni freccia sono speciali: non hanno `this`. Quando si prova ad accedere a `this` in una funzione freccia, questo verrà preso dal contesto esterno.
268
+
Da notare che le arrow functions sono speciali: non hanno `this`. Quando si prova ad accedere a `this` in una funzione freccia, questo verrà preso dal contesto esterno.
0 commit comments