"Sono stato bocciato a parecchi esami. Un mio amico invece, li ha passati tutti a pieni voti. Ora è ingegnere e lavora in Microsoft. Io sono il proprietario."  - Bill Gates  •  "Se riesco a fare qualcosa in 10 minuti, è perché ho passato anni a studiarlo."  - Bill Gates  •  "Il vostro lavoro riempirà gran parte della vostra vita, e l'unico modo per essere veramente soddisfatti è fare ciò che ritenete sia un grande lavoro."  - Steve Jobs  •  "Siate affamati. Siate folli."  - Steve Jobs  •  

cinque 

ZERO

{JS} Estendere costruttori & Classi

home / javascript /

Lucio Paolo Asciolla

Senior Full Stack Developer

Estendere un costruttore

Potremmo trovarci nella condizione di dover estendere/creare un costruttore partendo da un costruttore già esistente.

Costruttore principale
function Persona(nome, cognome){
this.nome=nome;
this.cognome=cognome;
}
Costruttore aggiunto
function Programmatore(nome,cognome,linguaggio){
Persona.call(this,nome,cognome);
this.linguaggio=linguaggio;
}

Abbiamo creato il costruttore "Programmatore" richiamando il costruttore "Persona" e le sue proprietà all'interno di esso; per farlo abbiamo utilizzato il metodo .call() dell'oggetto "function" e questo è stato possibile perche un costruttore ricordiamo essere in se una semplice funzione.

Il metodo .call() come abbimo già visto può prevedere più paramentri; il primo dei quali è l'impostazione del thisArg;
In questo esempio this fa riferimento a "Programmatore" a cui si richiede con i due successivi argomenti di associare le proprietà "nome" e "cognome" di persona.

programmatore.prototype = Object.create(persona.prototype);

Con quest'ultima riga di codice indichiamo all'engine Javascript che il prototipo degli oggetti creati mediante il costruttore "Programmatore" hanno come prototipo il costruttore e gli oggetti "Persona".

var giuseppeVerdi = new Programmatore("Giuseppe", "Verdi", "Javascript");

Estendere una Classe

Come già visto, una classe non è altro che un costruttore di oggetti con una sintassi differente.

Classe principale
class Persona{
constructor(nome, cognome){
this.nome=nome;
this.cognome=cognome;
}}
Sottoclasse alias Classe estesa
class Programmatore extends Persona {
 constructor(nome, cognome){
 super(nome, cognome);
 this.linguaggiConosciuti = [];
 }
}

La parola chiave extends consente di dichiarare che la nuova classe programmatore deriva dalla classe persona. All’interno del costruttore della classe programmatore richiamiamo il costruttore della classe persona tramite l’invocazione di super(). In generale possiamo fare riferimento alla superclasse o classe base proprio tramite la parola chiave super.