Skip to content

Commit 1c4c671

Browse files
authored
Merge pull request #211 from Dorin-David/Articolo/object-reference
revisione articolo su this
2 parents 449f1d5 + f595951 commit 1c4c671

File tree

4 files changed

+31
-31
lines changed

4 files changed

+31
-31
lines changed

1-js/04-object-basics/04-object-methods/4-object-property-this/solution.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ alert( user.ref.name ); // Error: Cannot read property 'name' of undefined
1616

1717
Questo avviene perché le regole che impostano `this` non guardano agli oggetti letterali.
1818

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

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

2323
Quindi `ref: this` prende il `this` della funzione.
2424

@@ -31,7 +31,7 @@ function makeUser(){
3131

3232
alert( makeUser().name ); // Error: Cannot read property 'name' of undefined
3333
```
34-
Come puoi vedere, il risultato di `alert( makeUser().name )` è lo stesso di `alert( user.ref.name )` nell'esempio precedente.
34+
Come possiamo vedere, il risultato di `alert( makeUser().name )` è lo stesso di `alert( user.ref.name )` nell'esempio precedente.
3535

3636
Qui abbiamo il caso opposto:
3737

@@ -52,6 +52,6 @@ let user = makeUser();
5252
alert( user.ref().name ); // John
5353
```
5454

55-
Ora funziona, perché `user.ref()` è un metodo. E il valore di `this` viene impostato all'oggetto prima del punto `.`.
55+
Ora funziona, perché `user.ref()` è un metodo. E il valore di `this` si riferisce all'oggetto prima del punto `.`.
5656

5757

1-js/04-object-basics/04-object-methods/4-object-property-this/task.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ importance: 5
66

77
Qui la funzione `makeUser` ritorna un oggetto.
88

9-
Qual'è il risultato dell'accesso a `ref`? Perché?
9+
Qual è il risultato dell'accesso a `ref`? Perché?
1010

1111
```js
1212
function makeUser() {
@@ -18,6 +18,6 @@ function makeUser() {
1818

1919
let user = makeUser();
2020

21-
alert( user.ref.name ); // What's the result?
21+
alert( user.ref.name ); //Qual è il risultato?
2222
```
2323

1-js/04-object-basics/04-object-methods/8-chain-calls/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,4 @@ Modificare il codice di `up`, `down` e `showStep` per rendere le chiamate concat
3636
ladder.up().up().down().showStep(); // 1
3737
```
3838

39-
Questo approcio è largamente utilizzato dalle librerie JavaScript.
39+
Questo approccio è largamente utilizzato dalle librerie JavaScript.

1-js/04-object-basics/04-object-methods/article.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ user.sayHi = function() {
3232
user.sayHi(); // Hello!
3333
```
3434

35-
Qui abbiamo appena utilizzato un espressione 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.
3636

37-
Successivamente possiamo chiamarla. Ora l'utente potrà parlare!
37+
Successivamente possiamo chiamarla. Ora l'utente può parlare!
3838

3939
Una funzione che è una proprietà di un oggetto si chiama *metodo*.
4040

41-
Quindi, nell'esempio abbiamo un metodo `sayHi` per l'oggetto `user`.
41+
Quindi, nell'esempio abbiamo un metodo `sayHi` dell'oggetto `user`.
4242

4343
Ovviamente possiamo utilizzare una funzione già dichiarata come metodo:
4444

@@ -70,7 +70,7 @@ OOP è una grande cosa, un ambito di interesse con i propri studi. Come sceglier
7070
Esiste una sintassi più breve per i metodi in un oggetto letterale:
7171

7272
```js
73-
// questi oggetti sono la stessa cosa
73+
// questi oggetti fanno la stessa cosa
7474

7575
user = {
7676
sayHi: function() {
@@ -90,11 +90,11 @@ user = {
9090

9191
Come possiamo notare, si può omettere `"function"` e scrivere solamente `sayHi()`.
9292

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

9595
## "this" nei metodi
9696

97-
E' molto comune che un 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.
9898

9999
Ad esempio, il codice dentro `user.sayHi()` potrebbe aver bisogno del nome dell'`user`.
100100

@@ -121,9 +121,9 @@ let user = {
121121
user.sayHi(); // John
122122
```
123123

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

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

128128
```js
129129
let user = {
@@ -139,9 +139,9 @@ let user = {
139139
};
140140
```
141141

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

144-
Lo dimostriamo:
144+
Dimostriamolo:
145145

146146
```js run
147147
let user = {
@@ -169,7 +169,7 @@ Se scriviamo `this.name` piuttosto di `user.name` all'interno di `alert`, il cod
169169

170170
## "this" non ha limiti
171171

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

174174
Non c'è alcun errore di sintassi in un codice come questo:
175175

@@ -179,7 +179,7 @@ function sayHi() {
179179
}
180180
```
181181

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

184184
Ad esempio, la stessa funzione potrebbe avere diversi "this" quando viene chiamata da oggetti diversi:
185185

@@ -205,7 +205,7 @@ admin.f(); // Admin (this == admin)
205205
admin['f'](); // Admin (il punto o le parentesi quadre forniscono entrambi accesso ai metodi - non c'è differenza)
206206
```
207207

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

210210
````smart header="Invocazione senza un oggetto: `this == undefined`"
211211
Possiamo anche chiamare la funzione senza un oggetto:
@@ -220,22 +220,22 @@ sayHi(); // undefined
220220

221221
In questo caso `this` è `undefined` in modalità strict. Se tentiamo di accedere a `this.name`, ci sarà un errore.
222222

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

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.
226226
````
227227
228228
```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.
230230
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".
232232
233233
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.
234234
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.
236236
```
237237
238-
## Arrow functions have no "this"
238+
## Le arrow functions non hanno "this"
239239
240240
Ad esempio, qui `arrow()` usa `this` preso dal metodo esterno `user.sayHi()`:
241241
@@ -251,18 +251,18 @@ let user = {
251251
user.sayHi(); // Ilya
252252
```
253253
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.
255255
256256
257257
## Riepilogo
258258
259259
- 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()`.
261261
- I metodi possono riferirsi all'oggetto tramite `this`.
262262
263263
Il valore `this` viene definito durante l'esecuzione (run-time).
264264
- 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`.
267267
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

Comments
 (0)