sabato 27 dicembre 2014

Ereditarietà in Javascript

Creo un costruttore qualunque:
<script>
function classe(nome){
 this.chiama=function(){
  alert(nome);
 }
}
function inizia(){
 var oggetto=new classe("Cicciobello");
 oggetto.chiama();
}
window.addEventListener("load",function(){inizia()});
</script>
Bene.
Ho creato un'istanza oggetto di una classe classe.

Ora voglio creare una classe che eredita da classe...

Ecco:
<script>
function classe(nome){
 this.chiama=function(){
  alert(nome);
 }
}

function figlia(nome){
 classe.call(this,nome);
}
function inizia(){
 var oggetto=new classe("Cicciobello");
 oggetto.chiama();
 
 var derivata=new figlia("Mario");
 derivata.chiama();
}
window.addEventListener("load",function(){inizia()});
</script>
E ottengo una seconda MessageBox con il nome "Mario". Quindi funziona.

Come controprova tolgo la riga con scritto classe.call(this,nome);
<script>
function classe(nome){
 this.chiama=function(){
  alert(nome);
 }
}

function figlia(nome){
 
}
function inizia(){
 var oggetto=new classe("Cicciobello");
 oggetto.chiama();
 
 var derivata=new figlia("Mario");
 derivata.chiama();
}
window.addEventListener("load",function(){inizia()});
</script>
E vediamo:
Sì, non ottengo più la seconda MessageBox.
Questo che significa?
Praticamente invece di scrivere public classe o :classe o extends classe come nei vari linguaggi, qui si inserisce il nome della classe genitrice con il call(this.... e i parametri).

Nessun commento:

Posta un commento