Skip to content

Commit adea864

Browse files
authored
Merge pull request #214 from Dorin-David/Articolo/constructor-new
new operator article
2 parents ad141d7 + 16127f7 commit adea864

File tree

2 files changed

+31
-30
lines changed

2 files changed

+31
-30
lines changed

1-js/04-object-basics/06-constructor-new/1-two-functions-one-object/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Si, è possibile.
22

3-
Se una funzione ritorna un oggetto, questo verrà fornito alla `new` piuttosto che `this`.
3+
Se una funzione ritorna un oggetto, questo verrà ritornato da `new` invece di `this`.
44

55
Quindi, le due funzioni potrebbero ritornare un oggetto definito esternamente `obj`:
66

1-js/04-object-basics/06-constructor-new/article.md

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# Costruttore, operatore "new"
22

3-
La sintassi `{...}` ci consente di creare un oggetto. Spesso abbiamo bisogno di creare più oggetti simili, come ad esempio più utenti, oggetti del menu e molto altro.
3+
La sintassi `{...}` ci consente di creare un oggetto. Ma spesso abbiamo bisogno di creare multipli oggetti simili, come ad esempio più utenti, oggetti del menu e molto altro.
44

5-
Questo può essere fatto utilizzando il costruttore e l'operatore `"new"`.
5+
Questo può essere fatto utilizzando un costruttore e l'operatore `"new"`.
66

77
## Costruttore
88

9-
Il costruttore tecnicamente è una normale funzione. Ci sono due convenzioni:
9+
Tecnicamente un costruttore è una normale funzione. Ma ci sono due convenzioni:
1010

1111
1. Vengono denominati con la prima lettera maiuscola.
1212
2. Questi dovrebbero essere eseguiti solo con l'operatore `"new"`.
@@ -27,9 +27,9 @@ alert(user.name); // Jack
2727
alert(user.isAdmin); // false
2828
```
2929

30-
Quando una funzione viene eseguita con `new`, segue questi passaggi:
30+
Quando una funzione viene eseguita con `new`, esegue questi passaggi:
3131

32-
1. Un nuovo oggetto vuoto viene creato ed assegnato a `this`.
32+
1. Un nuovo oggetto, vuoto, viene creato ed assegnato a `this`.
3333
2. Viene eseguito il corpo della funzione. Solitamente questo modifica `this`, aggiungendo nuove proprietà.
3434
3. Viene ritornato il valore assegnato a `this`.
3535

@@ -60,11 +60,11 @@ let user = {
6060
};
6161
```
6262

63-
Ora se vogliamo creare altri utenti, possiamo chiamare `new User("Ann")`, `new User("Alice")` e cosi via. Molto più rapido piuttosto che utilizzare oggetti letterali ogni volta, risulta anche più facile da leggere.
63+
Ora, se vogliamo creare altri utenti, possiamo chiamare `new User("Ann")`, `new User("Alice")` e cosi via. Molto più rapido rispetto all'utilizzare ogni volta oggetti letterali; risulta anche più facile da leggere.
6464

65-
Questo è il principale scopo dei costruttori -- implementare codice riutilizzabile per la creazione degli oggetti.
65+
Questo è il principale scopo dei costruttori -- implementare codice riutilizzabile per la creazione di oggetti.
6666

67-
Ribadiamo -- tecnicamente, ogni funzione può essere utilizzata come costruttore. Cioè: ogni funzione può essere eseguita con `new`. La "prima lettera maiuscola" è semplicemente una convenzione, per rendere esplicito che la funzione deve essere eseguita con `new`.
67+
Ribadiamo -- tecnicamente, ogni funzione può essere utilizzata come costruttore. Ovvero: ogni funzione può essere eseguita con `new`. La "prima lettera maiuscola" è semplicemente una convenzione, per rendere esplicito che la funzione deve essere eseguita con `new`.
6868

6969
````smart header="new function() { ... }"
7070
Se abbiamo molte linee di codice utili alla creazione di un unico oggetto, possiamo raggrupparle in un costruttore, come qui:
@@ -80,13 +80,13 @@ let user = new function() {
8080
};
8181
```
8282
83-
Il costruttore non può essere chiamato nuovamente, perché non è salvato da nessuna parte, viene solo creato e chiamato. Quindi questo trucco consente di incapsulare codice che costruisce un singolo oggetto, senza possibilità di riutilizzo futuro.
83+
Il costruttore non può essere chiamato nuovamente, perché non è salvato da nessuna parte; viene solo creato e chiamato. Questo trucco consente di incapsulare un codice che costruisce un singolo oggetto, senza possibilità di riutilizzo futuro.
8484
````
8585

8686
## Costruttori modalità test: new.target
8787

8888
```smart header="Tecniche avanzate"
89-
La sintassi presentata in questa sessione viene utilizzata raramente, potete tranquillamente saltarlo se non siete interessati.
89+
La sintassi presentata nella seguente sezione viene utilizzata raramente; potete tranquillamente saltarla se non vi interessa sapere proprio tutto.
9090
```
9191

9292
Dentro la funzione, possiamo controllare quando questa viene chiamata con `new` e quando senza, utilizzando una speciale proprietà `new.target`.
@@ -110,9 +110,9 @@ new User(); // function User { ... }
110110
*/!*
111111
```
112112

113-
Questo può essere utilizzato per consentire ad entrambe le chiamate di funzionare (con `new` e senza), quindi sia in in "modalità costruttore" che in "modalità classica".
113+
Questo può essere utilizzato per consentire ad entrambe le chiamate di funzionare (con `new` e senza), quindi sia in in "modalità costruttore" che in "modalità regolare".
114114

115-
Possiamo anche utilizzarli entrambi `new` e chiamata regole, per fare la stessa cosa, come in questo esempio:
115+
Possiamo anche fare in modo che le chiamate con *new* e quelle regolari facciano la stessa cosa, come in questo esempio:
116116

117117
```js run
118118
function User(name) {
@@ -127,21 +127,21 @@ let john = User("John"); // reindirizza la chiamata a new User
127127
alert(john.name); // John
128128
```
129129

130-
Questo approccio viene adottato in alcune librerie per rendere la sintassi più flessibile. Rendendo possibile la chiamata della funzione sia senza che con la parola chiave`new`.
130+
Questo approccio viene adottato in alcune librerie per rendere la sintassi più flessibile. Rende possibile la chiamata della funzione sia con `new` che senza.
131131

132-
Non è un ottima cosa utilizzare la doppia sintassi ovunque, perché omettendo `new` il codice perde di leggibilità. Con la parola chiave `new` possiamo dire con certezza che si sta creando un nuovo oggetto.
132+
Ma non è un'ottima cosa utilizzare la doppia sintassi ovunque, perché omettendo `new` il codice perde in leggibilità. Con la parola chiave `new` possiamo sapere con certezza che si sta creando un nuovo oggetto.
133133

134134
## Return nel costruttore
135135

136136

137-
Solitamente, i costruttori non hanno l'istruzione `return`. Il loro compito è di eseguire tutto ciò che è necessario a creare l'oggetto lavorando su `this`, quest'ultimo sarà il risultato.
137+
Solitamente, i costruttori non hanno l'istruzione `return`. Il loro compito è di eseguire tutto ciò che è necessario a creare l'oggetto lavorando su `this`; quest'ultimo sarà il risultato.
138138

139-
Se decidiamo di inserire un istruzione di `return`, vanno seguite delle semplici regole:
139+
Se decidiamo di inserire un'istruzione di `return`, vanno seguite delle semplici regole:
140140

141141
- Se `return` viene invocato con un oggetto, questo verrà ritornato al posto di `this`.
142142
- Se `return` viene invocato con un tipo primitivo, verrà ignorato.
143143

144-
In altre parole, `return` su un oggetto ritorna quell'oggetto, in tutti gli altri casi verrà ritornato `this`.
144+
In altre parole, `return` con un oggetto ritorna quell'oggetto; in tutti gli altri casi verrà ritornato `this`.
145145

146146
Ad esempio, qui `return` sovrascrive `this` ritornando un oggetto:
147147

@@ -153,7 +153,7 @@ function BigUser() {
153153
return { name: "Godzilla" }; // <-- ritorna questo oggetto
154154
}
155155

156-
alert( new BigUser().name ); // Godzilla, ottieni quell'oggetto
156+
alert( new BigUser().name ); // Godzilla
157157
```
158158

159159
Qui invece abbiamo un esempio con un `return` vuoto (potremmo anche ritornare un qualsiasi valore di tipo primitivo):
@@ -163,12 +163,13 @@ function SmallUser() {
163163

164164
this.name = "John";
165165

166-
167-
// ...
168-
166+
return; // <-- returns this
169167
}
170168

171-
Solitamente i costruttori non possiedono l'istruzione `return`. Qui per completezza abbiamo citato gli eventuali comportamenti, se si tenta di ritornare un oggetto.
169+
alert(new SmallUser().name); //John
170+
```
171+
172+
Solitamente i costruttori non hanno l'istruzione `return`. Abbiamo comunque riportato, per completezza, quel che succede se si tenta di ritornare un oggetto.
172173

173174
````smart header="Omettere le parentesi"
174175
Possiamo anche omettere le parentesi dopo `new`, se non ci sono argomenti:
@@ -184,11 +185,11 @@ L'omissione delle parentesi non viene considerata come "buona programmazione", l
184185

185186
## Metodi in un costruttore
186187

187-
Utilizzare costruttori per creare degli oggetti fornisce una grande vantaggio in termini di flessibilità. Il costruttore può avere dei parametri che definiscono come costruire l'oggetto, e cosa "metterci dentro".
188+
Utilizzare costruttori per creare degli oggetti ci dà un grande vantaggio in termini di flessibilità. Il costruttore può avere dei parametri che definiscono come costruire l'oggetto, e cosa "metterci dentro".
188189

189190
Ovviamente, possiamo aggiunger a `this` non solo proprietà, ma anche metodi.
190191

191-
Ad esempio, `new User(name)` crea un oggetto con un nome dato `name` e un metodo `sayHi`:
192+
Ad esempio, `new User(name)` crea un oggetto con un nome (passato come `name`) e un metodo `sayHi`:
192193

193194
```js run
194195
function User(name) {
@@ -202,7 +203,7 @@ function User(name) {
202203
*!*
203204
let john = new User("John");
204205

205-
john.sayHi(); // Il mio nome è: John
206+
john.sayHi(); // My name is: John
206207
*/!*
207208

208209
/*
@@ -217,15 +218,15 @@ Per creare oggetti più complessi, esiste una sintassi più avanzata, [classes](
217218

218219
## Riepilogo
219220

220-
- Le funzioni di costruzione, o meglio, i costruttori, solo delle normali funzioni, che seguono però una regola di accordo comune che prevede di denominarle con la prima lettera maiuscola.
221-
- Un costruttore dovrebbe essere chiamato solamente utilizzando `new`. Questo tipo di chiamata implica la creazione di un oggetto vuoto `this`, che verrà popolato entro la fine della funzione.
221+
- Le funzioni di costruzione, o meglio, i costruttori, sono solo delle normali funzioni; seguono però una convenzione comune che prevede di denominarle con la prima lettera maiuscola.
222+
- Un costruttore dovrebbe essere chiamato solamente utilizzando `new`. Questo tipo di chiamata implica la creazione di un oggetto vuoto, `this`, che verrà popolato entro la fine della funzione.
222223

223224
Possiamo utilizzare i costruttori per costruire molti oggetti simili tra loro.
224225

225226
JavaScript fornisce costruttori per la maggior parte degli oggetti integrati nel linguaggio: come `Date` per le date, `Set` per gli insiemi e molti altri che studieremo più avanti.
226227

227228
```smart header="Oggetti, ci ritorneremo!"
228-
In questo capitolo abbiamo coperto solamente le basi degli oggetti e dei costruttori. Era necessario conoscerne le basi per capire meglio riguardo i data types e le funzioni che studieremo nel prossimo capitolo.
229+
In questo capitolo abbiamo coperto solamente le basi degli oggetti e dei costruttori. Era necessario conoscerne le basi per capire meglio i data types e le funzioni che studieremo nel prossimo capitolo.
229230
230-
Dopo averli compresi, ritorneremo sugli oggetti e li analizzeremo più in dettaglio nei capitoli <info:prototypes> e <info:classes>.
231+
Dopo questo, ritorneremo sugli oggetti e li analizzeremo più in dettaglio nei capitoli <info:prototypes> e <info:classes>.
231232
```

0 commit comments

Comments
 (0)