Skip to content

Commit 4c833ca

Browse files
committed
fix conflicts from previeous merge
1 parent 3df2cb3 commit 4c833ca

File tree

32 files changed

+167
-1425
lines changed

32 files changed

+167
-1425
lines changed

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

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,24 @@ 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 come una funzione, non come un metodo.
2020

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

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

25-
<<<<<<< HEAD
26-
Qui abbiamo il caso opposto:
27-
=======
28-
We can rewrite the function and return the same `this` with `undefined` value:
25+
Possiamo riscrivere la funzione e ritornare lo stesso `this` con valore `undefined`:
2926

3027
```js run
3128
function makeUser(){
32-
return this; // this time there's no object literal
29+
return this; // questa volta non c'e' un oggetto letterale
3330
}
3431

3532
alert( makeUser().name ); // Error: Cannot read property 'name' of undefined
3633
```
37-
As you can see the result of `alert( makeUser().name )` is the same as the result of `alert( user.ref.name )` from the previous example.
34+
Come puoi vedere, il risultato di `alert( makeUser().name )` è lo stesso di `alert( user.ref.name )` nell'esempio precedente.
3835

39-
Here's the opposite case:
40-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
36+
Qui abbiamo il caso opposto:
4137

4238
```js run
4339
function makeUser() {

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

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

35-
<<<<<<< HEAD
3635
Qui abbiamo appena utilizzato un espressione di funzione per creare una funzione ed assegnarla alla proprietà `user.sayHi` dell'oggetto.
3736

3837
Successivamente possiamo chiamarla. Ora l'utente potrà parlare!
3938

4039
Una funzione che è una proprietà di un oggetto si chiama *metodo*.
41-
=======
42-
Here we've just used a Function Expression to create a function and assign it to the property `user.sayHi` of the object.
43-
44-
Then we can call it as `user.sayHi()`. The user can now speak!
45-
46-
A function that is a property of an object is called its *method*.
47-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
4840

4941
Quindi, nell'esempio abbiamo un metodo `sayHi` per l'oggetto `user`.
5042

@@ -56,7 +48,7 @@ let user = {
5648
};
5749

5850
*!*
59-
// prima la dichiaramo
51+
// prima la dichiariamo
6052
function sayHi() {
6153
alert("Hello!");
6254
};
@@ -68,17 +60,10 @@ user.sayHi = sayHi;
6860
user.sayHi(); // Hello!
6961
```
7062

71-
<<<<<<< HEAD
7263
```smart header="Programmazione orientata agli oggetti"
7364
Quando scriviamo codice utilizzando gli oggetti per rappresentare le entità, questa viene definita [programmazione orientata agli oggetti](https://en.wikipedia.org/wiki/Object-oriented_programming), in breve: "OOP".
7465
7566
OOP è una grande cosa, un ambito di interesse con i propri studi. Come scegliere le giuste entità? Come organizzare le interazioni tra loro? Questa è l'architettura di un codice, e ci sono molti libri importanti che trattano questo argomento, come "Design Patterns: Elements of Reusable Object-Oriented Software" di E.Gamma, R.Helm, R.Johnson, J.Vissides oppure "Object-Oriented Analysis and Design with Applications" di G.Booch, e molti altri.
76-
=======
77-
```smart header="Object-oriented programming"
78-
When we write our code using objects to represent entities, that's called [object-oriented programming](https://en.wikipedia.org/wiki/Object-oriented_programming), in short: "OOP".
79-
80-
OOP is a big thing, an interesting science of its own. How to choose the right entities? How to organize the interaction between them? That's architecture, and there are great books on that topic, like "Design Patterns: Elements of Reusable Object-Oriented Software" by E. Gamma, R. Helm, R. Johnson, J. Vissides or "Object-Oriented Analysis and Design with Applications" by G. Booch, and more.
81-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
8267
```
8368
### La forma breve dei metodi
8469

@@ -175,28 +160,18 @@ let user = {
175160
let admin = user;
176161
user = null; // sovrascriviamo per rendere tutto più ovvio
177162

178-
<<<<<<< HEAD
179-
admin.sayHi(); // Whoops! all'interno di sayHi(), viene utilizzato il vecchio name! Errore!
180-
=======
181163
*!*
182-
admin.sayHi(); // TypeError: Cannot read property 'name' of null
164+
admin.sayHi(); // Errore: non possiamo leggere la proprietà 'name' di null
183165
*/!*
184-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
185166
```
186167

187168
Se scriviamo `this.name` piuttosto di `user.name` all'interno di `alert`, il codice funzionerà.
188169

189170
## "this" non ha limiti
190171

191-
<<<<<<< HEAD
192-
In JavaScript, la parola chiave "this" si comporta diversamente da molti altri linguaggi di programmazione. Primo, può essere utilizzata in ogni funzione.
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.
193173

194174
Non c'è alcun errore di sintassi in un codice come questo:
195-
=======
196-
In JavaScript, keyword `this` behaves unlike most other programming languages. It can be used in any function, even if it's not a method of an object.
197-
198-
There's no syntax error in the following example:
199-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
200175

201176
```js
202177
function sayHi() {
@@ -247,127 +222,20 @@ In questo caso `this` è `undefined` in modalità strict. Se tentiamo di accede
247222

248223
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.
249224

250-
<<<<<<< HEAD
251-
Va detto che solitamente una chiamata a funzione che utilizza `this` senza un oggetto non è comune, nella maggior part dei casi è un errore di programmazione. Se una funzione utilizza `this`, ha senso che venga invocata nel contesto di un oggetto.
252-
=======
253-
Usually such call is a programming error. If there's `this` inside a function, it expects to be called in an object context.
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.
254226
````
255-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
256227
257228
```smart header="Le conseguenze della libertà di `this`"
258229
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.
259230
260-
<<<<<<< HEAD
261231
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".
262232
263-
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. Questa grande flessibilità può essere fonte di molti errori.
264-
265-
In questa guida non vogliamo giudicare le scelte di design effettuate. Ci concentriamo su come le cose funzionano, come trarre benefici ed evitare errori.
266-
```
267-
268-
## Le parti interne: il tipo riferimento
269-
270-
```warn header="Caratteristiche del linguaggio più profonde"
271-
Questa sezione coprirà un argomento avanzato, per poter capire meglio alcuni casi limite.
272-
273-
Se volete potete saltare questa sezione o posticiparne la lettura.
274-
```
275-
276-
Una chiamata complessa può perde `this`, ad esmpio:
277-
278-
```js run
279-
let user = {
280-
name: "John",
281-
hi() { alert(this.name); },
282-
bye() { alert("Bye"); }
283-
};
284-
285-
user.hi(); // John (la chiamata semplice funzione)
286-
287-
*!*
288-
// ora proviamo a chiamare user.hi o user.bye in base a name
289-
(user.name == "John" ? user.hi : user.bye)(); // Errore!
290-
*/!*
291-
```
292-
293-
Nell'ultima riga c'è un operatore ternario che deve decidere tra `user.hi` o `user.bye`. In questo caso `user.hi`.
294-
295-
Il metodo viene immediatamente chiamato con le parentesi `()`. Ma non funziona correttamente!
296-
297-
Abbiamo visto che la chiamata ritorna un errore, questo è dovuto al fatto che il valore di `"this"` all'interno della chiamata diventa `undefined`.
298-
299-
Questo funziona (oggetto punto metodo):
300-
```js
301-
user.hi();
302-
```
303-
304-
Questo non funziona (valutazione del metodo):
305-
```js
306-
(user.name == "John" ? user.hi : user.bye)(); // Errore!
307-
```
308-
309-
Perché? Se voglia capire perché accade questo, dobbiamo capire come funziona la chiamata `obj.method()`.
310-
311-
Guardandola da più vicino, possiamo notare due operazioni in `obj.method()`:
312-
313-
1. Prima, il punto `'.'` ritorna la proprietà `obj.method`.
314-
2. Poi la parentesi `()` la esegue.
315-
316-
Quindi, come vengono passate le informazioni riguardo `this` dalla prima alla seconda parte?
317-
318-
Se poniamo queste operazioni in due righe separate, allora `this` verrà certamente perso:
319-
320-
```js run
321-
let user = {
322-
name: "John",
323-
hi() { alert(this.name); }
324-
}
325-
326-
*!*
327-
// preleviamo la funzione e la invochiamo successivamente
328-
let hi = user.hi;
329-
hi(); // Errore, perhcé this è undefined
330-
*/!*
331-
```
332-
333-
Qui `hi = user.hi` mette la funzione nella variabile, e nella riga successiva viene chiamata da sola, non c'è nessun `this`.
334-
335-
**Per rendere funzionante `user.hi()`, JavaScript usa un trucco -- il punto `'.'` non ritorna una funzione, ma un speciale valore di [tipo riferimento](https://tc39.github.io/ecma262/#sec-reference-specification-type).**
336-
337-
Il tipo riferimento è un "tipo specifico". Noi non possiamo utilizzarlo esplicitamente, viene usato internamente dal linguaggio.
338-
339-
Il valore del tipo riferimento è una combinazione di tre valori `(base, name, strict)`, dove:
340-
341-
- `base` è l'oggetto.
342-
- `name` è la proprietà.
343-
- `strict` è vero se `use strict` è attivo.
344-
345-
Il risultato dell'accesso ad un proprietà `user.hi` non è una funzione, ma un valore di tipo riferimento. Per `user.hi` con la modalità strict attiva:
346-
347-
```js
348-
// Reference Type value
349-
(user, "hi", true)
350-
```
351-
352-
Quando le parentesi `()` vengono chiamate sul tipo riferimento, queste ricevono le informazioni riguardo l'oggetto e i suoi metodi, e possono settare il `this` (`=user` in questo caso).
353-
354-
Qualsiasi operazione come l'assegnazione `hi = user.hi` scartano il tipo riferimento, prendono il valore di `user.hi` (una funzione) e lo ritornano per l'assegnazione. Quindi qualsiasi operazione ulteriore sul tipo riferimento perde il `this`.
355-
356-
Quindi il valore `this` viene passato solamente chiamando la funzione direttamente usando la notazione puntata `obj.method()` o le parentesi quadre `obj['method']()` (vanno bene entrambe). Più avanti in questa guida, studieremo vari modi per risolvere il problema come [func.bind()](/bind#solution-2-bind).
357-
358-
## Le funzioni freccia non hanno "this"
359-
360-
Le funzioni freccia sono speciali: non hanno un proprio `this`. Se proviamo a riferirci a `this` all'interno di una funzione di questo tipo, verrà preso dal contesto esterno.
361-
=======
362-
In JavaScript `this` is "free", its value is evaluated at call-time and does not depend on where the method was declared, but rather on what object is "before the dot".
363-
364-
The concept of run-time evaluated `this` has both pluses and minuses. On the one hand, a function can be reused for different objects. On the other hand, the greater flexibility creates more possibilities for mistakes.
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.
365234
366-
Here our position is not to judge whether this language design decision is good or bad. We'll understand how to work with it, how to get benefits and avoid problems.
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.
367236
```
368237
369238
## Arrow functions have no "this"
370-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
371239
372240
Ad esempio, qui `arrow()` usa `this` preso dal metodo esterno `user.sayHi()`:
373241

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

Lines changed: 5 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,7 @@ alert(user.name); // Jack
2727
alert(user.isAdmin); // false
2828
```
2929

30-
<<<<<<< HEAD
31-
Quando una funzione viene eseguita con `new User(...)`, segue questi passaggi:
32-
=======
33-
When a function is executed with `new`, it does the following steps:
34-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
30+
Quando una funzione viene eseguita con `new`, segue questi passaggi:
3531

3632
1. Un nuovo oggetto vuoto viene creato ed assegnato a `this`.
3733
2. Viene eseguito il corpo della funzione. Solitamente questo modifica `this`, aggiungendo nuove proprietà.
@@ -45,7 +41,7 @@ function User(name) {
4541
// this = {}; (implicito)
4642
*/!*
4743

48-
// aggiungiamo proprietaà a this
44+
// aggiungiamo proprietà a this
4945
this.name = name;
5046
this.isAdmin = false;
5147

@@ -55,11 +51,7 @@ function User(name) {
5551
}
5652
```
5753

58-
<<<<<<< HEAD
59-
Quindi il risultato di `new User("Jack")` è lo stesso oggetto di:
60-
=======
61-
So `let user = new User("Jack")` gives the same result as:
62-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
54+
Quindi `let user = new User("Jack")` dà lo stesso risultato di:
6355

6456
```js
6557
let user = {
@@ -143,12 +135,7 @@ Non è un ottima cosa utilizzare la doppia sintassi ovunque, perché omettendo `
143135

144136
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.
145137

146-
<<<<<<< HEAD
147138
Se decidiamo di inserire un istruzione di `return`, vanno seguite delle semplici regole:
148-
=======
149-
- If `return` is called with an object, then the object is returned instead of `this`.
150-
- If `return` is called with a primitive, it's ignored.
151-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
152139

153140
- Se `return` viene invocato con un oggetto, questo verrà ritornato al posto di `this`.
154141
- Se `return` viene invocato con un tipo primitivo, verrà ignorato.
@@ -162,17 +149,10 @@ function BigUser() {
162149

163150
this.name = "John";
164151

165-
<<<<<<< HEAD
166-
return { name: "Godzilla" }; // <-- ritorna un oggetto
152+
return { name: "Godzilla" }; // <-- ritorna questo oggetto
167153
}
168154

169-
alert( new BigUser().name ); // Godzilla, preso l'oggetto ^^
170-
=======
171-
return { name: "Godzilla" }; // <-- returns this object
172-
}
173-
174-
alert( new BigUser().name ); // Godzilla, got that object
175-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
155+
alert( new BigUser().name ); // Godzilla, ottieni quell'oggetto
176156
```
177157

178158
Qui invece abbiamo un esempio con un `return` vuoto (potremmo anche ritornare un qualsiasi valore di tipo primitivo):
@@ -182,19 +162,11 @@ function SmallUser() {
182162

183163
this.name = "John";
184164

185-
<<<<<<< HEAD
186-
return; // al termine dell'esecuzione, ritorna this
187165

188166
// ...
189167

190-
=======
191-
return; // <-- returns this
192-
>>>>>>> 872cc6adedac4ff3ebec73916bf435f1d72f2864
193168
}
194169

195-
alert( new SmallUser().name ); // John
196-
```
197-
198170
Solitamente i costruttori non possiedono l'istruzione `return`. Qui per completezza abbiamo citato gli eventuali comportamenti, se si tenta di ritornare un oggetto.
199171
200172
````smart header="Omettere le parentesi"

0 commit comments

Comments
 (0)