JavaScript/Costruttori e prototipi
Wikibooks, manuali e libri di testo liberi.
In questo capitolo vedremo come creare nuovi oggetti e prototipi e come modificare gli oggetti esistenti in JavaScript. Questa è una delle grandi possibilità della programmazione orientata agli oggetti, ovvero quella di poter agire sul "cuore" del linguaggio stesso.
[modifica] Creare oggetti personalizzati
Come abbiamo spiegato nel capitolo precedente, per definire un nuovo prototipo di un oggetto è sufficiente definirne un costruttore, che non è altro che una funzione.
Ad esempio, volendo creare un oggetto "-macchina", sarà sufficiente creare una funzione Macchina() e instanziarla poi in una variabile:
function Macchina() { //... } var macchina = new Macchina(); //notare in questo caso la distinzione tra maiuscolo e minuscolo
Per fare riferimento alle proprietà dell'oggetto, all'interno della funzione usiamo la parola chiave this:
function Macchina(mod) { //passiamo qualche parametro al costruttore... this.modello = mod; } var macchina = new Macchina("Fiat Panda"); //posso modificare e accedere alle proprietà macchina.modello = "Fiat 500"; alert(macchina.modello);
Per creare un metodo inseriamo invece una funzione all'interno del costruttore:
function Macchina(mod) { //passiamo qualche parametro al costruttore... this.modello = mod; this.carburante = 0; function rifornisci(euro) { var litri = euro/prezzo_benzina; this.carburante += litri; } }
La creazione di oggetti personalizzati è in realtà piuttosto inutile nei casi presentati dagli esempi, ma può risultare comoda per applicazioni più complesse: l'uso degli oggetti è un modo chiaro ed efficacie per organizzare i dati.
[modifica] Modificare gli oggetti predefiniti
Molto interessante è anche la possibilità di accedere al prototipo di un oggetto, permettendo così di modificare anche tutte le sue istanze.
Ad esempio, il seguente spezzone di codice aggiunge a tutti gli array un metodo che prende un valore e restituisce true se è presente nell'array. Per fare questo accediamo al suo prototipo:
Array.prototype.contains = function (element) { for(i in this) { //scorre tutti gli elementi //se trova l'elemento restituisce true ed esce dalla funzione if(this[i] == element) return true; } return false; //questa riga verrà eseguita solo se non viene trovato nulla } var arr = new Array('a', 'b', 'c', 'd', 'e', 'f'); if (arr.contains('g')) { //falso //... } if (arr.contains('a')) { //vero //... }

