From 70ac9b9dd9dac8755e623f14d2614c53de71bfba Mon Sep 17 00:00:00 2001 From: Andrea Longo Date: Tue, 2 Mar 2021 21:19:04 +0100 Subject: [PATCH 1/4] translated article --- 1-js/09-classes/05-extend-natives/article.md | 48 ++++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/1-js/09-classes/05-extend-natives/article.md b/1-js/09-classes/05-extend-natives/article.md index dba4df472..5f2abbd61 100644 --- a/1-js/09-classes/05-extend-natives/article.md +++ b/1-js/09-classes/05-extend-natives/article.md @@ -1,12 +1,12 @@ -# Extending built-in classes +# Estendere le classi built-in -Built-in classes like Array, Map and others are extendable also. +Le classi built-in (integrate) come Array, Map e tutte le altre, sono anch'esse estendibili. -For instance, here `PowerArray` inherits from the native `Array`: +Ad esempio, qui vediamo `PowerArray` ereditare dall'`Array` nativo: ```js run -// add one more method to it (can do more) +// aggiungiamo un metodo (possiamo fare di più) class PowerArray extends Array { isEmpty() { return this.length === 0; @@ -21,20 +21,20 @@ alert(filteredArr); // 10, 50 alert(filteredArr.isEmpty()); // false ``` -Please note a very interesting thing. Built-in methods like `filter`, `map` and others -- return new objects of exactly the inherited type `PowerArray`. Their internal implementation uses the object's `constructor` property for that. +Notiamo una cosa interessante. I metodi built-in come like `filter`, `map` e cosi via -- ritornano nuovi esattamente del nuovo tipo ereditato, cioè `PowerArray`. La loro implementazione interna utilizzata il `costruttore` per farlo. -In the example above, +Nell'esempio sopra, ```js arr.constructor === PowerArray ``` -When `arr.filter()` is called, it internally creates the new array of results using exactly `arr.constructor`, not basic `Array`. That's actually very cool, because we can keep using `PowerArray` methods further on the result. +Quando invochiamo `arr.filter()`, questo creerà internamente il nuovo array contenente i risultati utilizzando `arr.constructor`, non l'`Array` standard. Questo è molto utile, poiché possiamo continuare ad utilizzare i metodi di `PowerArray` anche dopo aver ottenuto il risultato. -Even more, we can customize that behavior. +Ancora meglio, possiamo personalizzarne il comportamento. -We can add a special static getter `Symbol.species` to the class. If it exists, it should return the constructor that JavaScript will use internally to create new entities in `map`, `filter` and so on. +Possiamo aggiungre uno speciale getter statico `Symbol.species` alla classe. Questo dovrebbe ritornare il costruttore utilizzerà internamente per creare le nuove entità in `map`, `filter` e gli altri metodi. -If we'd like built-in methods like `map` or `filter` to return regular arrays, we can return `Array` in `Symbol.species`, like here: +Se invece, la nostra intenzione è quella di restituire degli array standard tramite l'utilizzo dei metodi come `map` o `filter`, possiamo ritornare `Array` in `Symbol.species`, come nell'esempio: ```js run class PowerArray extends Array { @@ -43,7 +43,7 @@ class PowerArray extends Array { } *!* - // built-in methods will use this as the constructor + // i metodi built-in lo utilizzeranno come costruttore static get [Symbol.species]() { return Array; } @@ -53,35 +53,35 @@ class PowerArray extends Array { let arr = new PowerArray(1, 2, 5, 10, 50); alert(arr.isEmpty()); // false -// filter creates new array using arr.constructor[Symbol.species] as constructor +// filter crea un nuovo array utilizzando arr.constructor[Symbol.species] come costruttore let filteredArr = arr.filter(item => item >= 10); *!* -// filteredArr is not PowerArray, but Array +// filteredArr non è di tipo PowerArray, ma è un Array standard */!* alert(filteredArr.isEmpty()); // Error: filteredArr.isEmpty is not a function ``` -As you can see, now `.filter` returns `Array`. So the extended functionality is not passed any further. +Come potete osservare, ora `.filter` restituisce un `Array`. Quindi l'estensione delle funzionalità non sarà più disponibile. -```smart header="Other collections work similarly" -Other collections, such as `Map` and `Set`, work alike. They also use `Symbol.species`. +```smart header="Le altre collezioni funzionano in maniera simile" +Le altre collezioni, come `Map` e `Set`, funzionano in maniera molto simile. Anche queste utilizzano `Symbol.species`. ``` -## No static inheritance in built-ins +## Con gli oggetti built-in non si ereditano le proprietà statiche -Built-in objects have their own static methods, for instance `Object.keys`, `Array.isArray` etc. +Gli oggetti built-in possiedono i loro metodi statici, ad esempio `Object.keys`, `Array.isArray` etc. -As we already know, native classes extend each other. For instance, `Array` extends `Object`. +Come già sappiamo, le classi integrate si estendono a vicenda. Ad esempio, `Array` estende `Object`. -Normally, when one class extends another, both static and non-static methods are inherited. That was thoroughly explained in the article [](info:static-properties-methods#statics-and-inheritance). +Normalmente, quando una classe ne estende un'altra, sia i metodi statici che quelli non-statici vengono ereditati. Questo è stato ampiamente spiegato nell'articolo [](info:static-properties-methods#statics-and-inheritance). -But built-in classes are an exception. They don't inherit statics from each other. +Ma le classi built-in fanno eccezione. Queste infatti, non ereditano i membri statici a vicenda. -For example, both `Array` and `Date` inherit from `Object`, so their instances have methods from `Object.prototype`. But `Array.[[Prototype]]` does not reference `Object`, so there's no, for instance, `Array.keys()` (or `Date.keys()`) static method. +Ad esempio, sia `Array` che `Date` ereditano da `Object`, quindi le loro istanze possiedono i metodi di `Object.prototype`. Ma `Array.[[Prototype]]` non fa riferimento ad `Object`, quindi, ad esempio, non si ha alcun metodo statico come `Array.keys()` (o `Date.keys()`). -Here's the picture structure for `Date` and `Object`: +Qui vediamo raffigurata la struttura per `Date` e `Object`: ![](object-date-inheritance.svg) -That's an important difference of inheritance between built-in objects compared to what we get with `extends`. +Questa è un'importante differenza dell'ereditarietà tra gli oggetti integrati, rispetto a quella che otteniamo tramite `extends`. From 33f81dac000afd8588d2b3849bb3b8fc5ae50865 Mon Sep 17 00:00:00 2001 From: Andrea <45577511+longo-andrea@users.noreply.github.com> Date: Fri, 5 Mar 2021 13:48:59 +0100 Subject: [PATCH 2/4] Apply suggestions from code review Co-authored-by: Dorin-David <70648503+Dorin-David@users.noreply.github.com> --- 1-js/09-classes/05-extend-natives/article.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/1-js/09-classes/05-extend-natives/article.md b/1-js/09-classes/05-extend-natives/article.md index 5f2abbd61..35490536e 100644 --- a/1-js/09-classes/05-extend-natives/article.md +++ b/1-js/09-classes/05-extend-natives/article.md @@ -21,7 +21,7 @@ alert(filteredArr); // 10, 50 alert(filteredArr.isEmpty()); // false ``` -Notiamo una cosa interessante. I metodi built-in come like `filter`, `map` e cosi via -- ritornano nuovi esattamente del nuovo tipo ereditato, cioè `PowerArray`. La loro implementazione interna utilizzata il `costruttore` per farlo. +Notiamo una cosa interessante. I metodi built-in come `filter`, `map` e così via -- ritornano nuovi oggetti del tipo ereditato, cioè `PowerArray`. La loro implementazione interna utilizzata il `costruttore` per farlo. Nell'esempio sopra, ```js @@ -32,7 +32,7 @@ Quando invochiamo `arr.filter()`, questo creerà internamente il nuovo array con Ancora meglio, possiamo personalizzarne il comportamento. -Possiamo aggiungre uno speciale getter statico `Symbol.species` alla classe. Questo dovrebbe ritornare il costruttore utilizzerà internamente per creare le nuove entità in `map`, `filter` e gli altri metodi. +Possiamo aggiungere uno speciale getter statico `Symbol.species` alla classe. Questo dovrebbe ritornare il costruttore che Javascript utilizzerà internamente per creare le nuove entità in `map`, `filter` e gli altri metodi. Se invece, la nostra intenzione è quella di restituire degli array standard tramite l'utilizzo dei metodi come `map` o `filter`, possiamo ritornare `Array` in `Symbol.species`, come nell'esempio: @@ -76,7 +76,7 @@ Come già sappiamo, le classi integrate si estendono a vicenda. Ad esempio, `Arr Normalmente, quando una classe ne estende un'altra, sia i metodi statici che quelli non-statici vengono ereditati. Questo è stato ampiamente spiegato nell'articolo [](info:static-properties-methods#statics-and-inheritance). -Ma le classi built-in fanno eccezione. Queste infatti, non ereditano i membri statici a vicenda. +Ma le classi built-in fanno eccezione. Queste, infatti, non ereditano i membri statici a vicenda. Ad esempio, sia `Array` che `Date` ereditano da `Object`, quindi le loro istanze possiedono i metodi di `Object.prototype`. Ma `Array.[[Prototype]]` non fa riferimento ad `Object`, quindi, ad esempio, non si ha alcun metodo statico come `Array.keys()` (o `Date.keys()`). From a7c55bbd6f75002d911ae9ae85c109b1c584046a Mon Sep 17 00:00:00 2001 From: Andrea <45577511+longo-andrea@users.noreply.github.com> Date: Fri, 5 Mar 2021 13:49:24 +0100 Subject: [PATCH 3/4] Apply suggestions from code review Co-authored-by: Dorin-David <70648503+Dorin-David@users.noreply.github.com> --- 1-js/09-classes/05-extend-natives/article.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/09-classes/05-extend-natives/article.md b/1-js/09-classes/05-extend-natives/article.md index 35490536e..b4beda77a 100644 --- a/1-js/09-classes/05-extend-natives/article.md +++ b/1-js/09-classes/05-extend-natives/article.md @@ -34,7 +34,7 @@ Ancora meglio, possiamo personalizzarne il comportamento. Possiamo aggiungere uno speciale getter statico `Symbol.species` alla classe. Questo dovrebbe ritornare il costruttore che Javascript utilizzerà internamente per creare le nuove entità in `map`, `filter` e gli altri metodi. -Se invece, la nostra intenzione è quella di restituire degli array standard tramite l'utilizzo dei metodi come `map` o `filter`, possiamo ritornare `Array` in `Symbol.species`, come nell'esempio: +Se, invece, la nostra intenzione è quella di restituire degli array standard tramite l'utilizzo dei metodi come `map` o `filter`, possiamo ritornare `Array` in `Symbol.species`, come nell'esempio: ```js run class PowerArray extends Array { From 5fc16b72c851ba654a097fa71e8b4ed80035bc59 Mon Sep 17 00:00:00 2001 From: Andrea <45577511+longo-andrea@users.noreply.github.com> Date: Sun, 7 Mar 2021 15:54:04 +0100 Subject: [PATCH 4/4] Apply suggestions from code review Co-authored-by: Simone Pasini <66781510+pasor1@users.noreply.github.com> --- 1-js/09-classes/05-extend-natives/article.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/1-js/09-classes/05-extend-natives/article.md b/1-js/09-classes/05-extend-natives/article.md index b4beda77a..e123e7ef1 100644 --- a/1-js/09-classes/05-extend-natives/article.md +++ b/1-js/09-classes/05-extend-natives/article.md @@ -21,20 +21,20 @@ alert(filteredArr); // 10, 50 alert(filteredArr.isEmpty()); // false ``` -Notiamo una cosa interessante. I metodi built-in come `filter`, `map` e così via -- ritornano nuovi oggetti del tipo ereditato, cioè `PowerArray`. La loro implementazione interna utilizzata il `costruttore` per farlo. +Notiamo una cosa interessante. I metodi built-in come `filter`, `map` e così via, ritornano nuovi oggetti del tipo ereditato, cioè `PowerArray`. La loro implementazione interna utilizzata la proprietà oggetto `constructor` per farlo. Nell'esempio sopra, ```js arr.constructor === PowerArray ``` -Quando invochiamo `arr.filter()`, questo creerà internamente il nuovo array contenente i risultati utilizzando `arr.constructor`, non l'`Array` standard. Questo è molto utile, poiché possiamo continuare ad utilizzare i metodi di `PowerArray` anche dopo aver ottenuto il risultato. +Quando invochiamo `arr.filter()`, questo creerà internamente il nuovo array contenente i risultati utilizzando `arr.constructor`, non l'oggetto `Array` standard. Questo è molto utile, poiché successivamente possiamo utilizzare i metodi di `PowerArray` sul risultato ottenuto. -Ancora meglio, possiamo personalizzarne il comportamento. +Inoltre, possiamo personalizzarne il comportamento. -Possiamo aggiungere uno speciale getter statico `Symbol.species` alla classe. Questo dovrebbe ritornare il costruttore che Javascript utilizzerà internamente per creare le nuove entità in `map`, `filter` e gli altri metodi. +Possiamo aggiungere uno speciale getter statico `Symbol.species` alla classe. Questo dovrebbe ritornare il costruttore che Javascript utilizzerà internamente per creare le nuove entità in `map`, `filter` e così via. -Se, invece, la nostra intenzione è quella di restituire degli array standard tramite l'utilizzo dei metodi come `map` o `filter`, possiamo ritornare `Array` in `Symbol.species`, come nell'esempio: +Se, ad esempio, volessimo che metodi come `map` o `filter` restituiscano un array standard, possiamo ritornare `Array` in `Symbol.species`, come nell'esempio: ```js run class PowerArray extends Array { @@ -76,7 +76,7 @@ Come già sappiamo, le classi integrate si estendono a vicenda. Ad esempio, `Arr Normalmente, quando una classe ne estende un'altra, sia i metodi statici che quelli non-statici vengono ereditati. Questo è stato ampiamente spiegato nell'articolo [](info:static-properties-methods#statics-and-inheritance). -Ma le classi built-in fanno eccezione. Queste, infatti, non ereditano i membri statici a vicenda. +Ma le classi built-in fanno eccezione. Queste, infatti, non ereditano i membri statici a le une dalle altre. Ad esempio, sia `Array` che `Date` ereditano da `Object`, quindi le loro istanze possiedono i metodi di `Object.prototype`. Ma `Array.[[Prototype]]` non fa riferimento ad `Object`, quindi, ad esempio, non si ha alcun metodo statico come `Array.keys()` (o `Date.keys()`). pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy