JavaScript presenta una programmazione ad oggetti basata sui prototipi. Questo concetto si differenzia un po' dai principali programmi orientati a questo tipo di programmazione com Java o C++.
Il suo funzionamento è semplice. Ciascuna classe presenta al suo interno una proprietà, chiamata appunto prototype, che presenta un 'meta oggetto'. Qualsiasi oggetto facente capo a questa classe sarà istanziato esattamente come una copia di questo prototipo. Modificando questa meta classe sarà possibile influenzare direttamente tutti i precedenti oggetti creati a partire da questa classe.
Passiamo subito ad una dimostrazione pratica:
<script type="text/javascript">
function init() {
var oggetto = function() {
this.name = "alberto";
}
var a = new oggetto();
oggetto.prototype.lastname = "bottarini";
var b = new oggetto();
alert("DATI DI A:n"+a.name+"n"+a.lastname);
alert("DATI DI B:n"+b.name+"n"+b.lastname);
}
window.onload = init;
</script>
Innanzitutto creiamo la classe oggetto
definendo solo il costruttore che imposta la proprietà name
. Successivamente instanziamo un oggetto (a
) e modifichiamo l'oggetto prototype aggiungendo una nuova proprietà: lastname
. Per ultimo instanziamo un secondo oggetto (b
) e stampiamo i parametri.
Nonostante possa sembrare strano, anche l'oggetto a
presenta una proprietà lastname
proprio perché entrambi gli oggetti fanno capo a questo prototipo definito nella proprietà prototype della classe oggetto.
Questa è una notevole comodità del linguaggio: è infatti possibile realizzare delle vere e proprie classi dinamiche che possono essere modificate internamente anche a runtime.