Programmazione Object Oriented in JavaScript
Socrate diceva: “Più so, più so di non sapere“. Ed è vero… Man mano che si impara (e nella vita si impara sempre), più dubbi ci vengono sulle nostre conoscenze ed io, sebbene sapessi che con JavaScript si potesse “programmare ad oggetti” (in senso lato) e me ne fossi fatto un’idea (per tentativi tanto tempo fa ho modificato una classe di YahooUI), non mi ero mai posto il problema di scoprire come in realtà si facesse. E ora che mi sono trovato davanti allo script dell’articolo precedente, ho deciso di colmare questa mia lacuna e ora riporto i miei appunti qui…
Chiunque viene dal mondo della programmazione ad oggetti ha familiarità con i concetti di tipo, tipo di dati astratto, classe, ereditarietà tra classi e così via. In JavaScript ci sono diversi modi di programmare ad oggetti; uno di questi modi fa uso del “prototype pattern” e con un esempio (per chi conosce la OOP) è bello che spiegato
function Persona() {
this.nome= "";
this.eta= 15;
}
Persona.prototype.setNome = function(_nome) {
this.nome= _nome;
}
Persona..prototype.setEta = function(_eta) {
this.eta = _eta;
}
var nicola = new Persona();
nicola .setNome ("nicola ");
nicola .setEta (25);
alert(nicola.nome + " - " + nicola.eta);
per ereditare la classe Persona
function Maschio() {
this.sesso= 'M';
}
Maschio.prototype = new Persona();
function Femmina() {
this.sesso= 'F';
}
Femmina.prototype = new Persona();
questa modalità di implementazione delle classi è quella consigliata quando si lavora con AJAX. Da notare è che si può scrivere anche:
function Persona() {
this.nome= "";
this.eta= 15;
Persona.prototype.setNome = function(_nome) {
this.nome= _nome;
};
Persona..prototype.setEta = function(_eta) {
this.eta = _eta;
};
}
ovvero tutto all’interno della function. Un altro modo per scrivere la stessa cosa è:
function Persona() {
this.nome= "";
this.eta= 15;
this.setNome = function(_nome) {
this.nome= _nome;
};
this.setEta = function(_eta) {
this.eta = _eta;
};
}
in questo caso, però, il trucchetto dell’ereditarietà non funziona.
L’altro modo per scrivere una classe è quello che ho trovato utilizzato in YahooUI e in jQuery (e nello spezzone di codice dell’articolo precedente) e di cui allego un esempio che dovrebbe essere abbastanza chiarificatore:
<html>
<head>
<script>
p = {
pippo : "ciao",
prova_var: 1,
prova: function()
{
alert(this.pippo + ' - ' + this.prova_var);
}
};
</script>
</head>
<body>
<input type="button" value="bottone" onclick="p.prova()" />
</body>
</html>
è una notazione cha sa di JSON e infatti è basata su quella JSON; definisce l’oggetto già come singola instanza: infatti, come si vede, lo utilizzo tranquillamente nel codice HTML.
Questo è solo qualche appunto, ma per approfondimenti contattate il vostro motore di ricerca di fiducia…
P.S.: Recentemente ho trovato questo link che sipega tutte le notazioni: http://www.phpied.com/3-ways-to-define-a-javascript-class/
