In questa parte finale della nostra guida a Javascript ritengo opportuno affrontare alcuni concetti avanzati, come ad esempio la gestione degli oggetti e, conseguentemente, accennare alla cosiddetta programmazione orientata agli oggetti.
Prima di poter parlare di OOP, ovviamente, รจ necessario introdurre il concetto di oggetto. In realtร , nel corso di questa guida, abbiamo giร avuto modo di avere a che fare con oggetti nativi del linguaggio; in questa lezione vedremo come creare oggetti personalizzati.
Definizione di oggetto
In via di estrema sintesi possiamo definire un oggetto come unโentitร che possiede determinate caratteristiche (che si estrinsecano sotto forma di dati che prendono il nome di proprietร ) ed รจ in grado di svolgere determinate azioni (che si estrinsecano in funzionalitร che prendono il nome di metodi).
Creare un oggetto personalizzato in Javascript
In un certo senso possiamo paragonare gli oggetti agli Array, nel senso che i primi ricordano strutturalmente un array associativo essendo composti da una serie di coppie nome/valore. Vediamo un esempio:
var auto = { marca: "Audi", modello: "A4" }
Nel nostro esempio abbiamo creato una variabile oggetto di nome "auto" avente due distinte proprietร (marca e modello).
La sintassi, che estende la definizione di una comune variabile, prevede lโutilizzo delle parentesi graffe per circondare le diverse coppie di nome/valore tra loro separate da virgole. Lโoperatore di assegnazione che "collega" il nome al valore รจ il simbolo dei due punti (:).
Eโ appena il caso di sottolineare che nulla vieta di scrivere il medesimo oggetto sfruttando ritorni a capo ed un po di "indentatura" per migliorarne la leggibilitร :
var auto = {
marca: "Audi",
modello: "A4"
}
Una sintassi alternativa, ma del tutto equivalente a quella appena vista, prevede il ricorso allโoggetto Object in questo modo:
var auto = new Object({
marca: "Audi",
modello: "A4"
});
Lettura e modifica delle proprietร di un oggetto Javascript
Accedere alla proprietร di un oggetto javascript รจ estremamente semplice. Per farlo sarร necessario far ricorso a questa sintassi:
nome_oggetto.nome_proprieta
Oppure:
nome_oggetto[nome_proprieta]
Le due sintassi sopra esposte sono analoghe.
Tornando al nostro esempio pratico, supponiamo di voler stampare a video la marca del nostro oggetto "auto". Per farlo utilizzeremo:
document.write(auto.marca);
Oppure:
document.write(auto["marca"]);
Altrettanto semplice e la modifica del valore di una delle proprietร dellโoggetto. Per farlo sarร sufficiente comportarsi come nel caso della assegnazione di un nuovo valore ad una comune variabile:
nome_oggetto.nome_proprieta = nuovo_valore
Oppure:
nome_oggetto[nome_proprieta] = nuovo_valore
Ad esempio:
auto.modello = "Q3";
Oppure:
auto["modello"] = "Q3";
Aggiunta di nuove proprietร ad un oggetto Javascript
Le procedura per lโaggiunta e lโeliminazione di proprietร da un oggetto sono altrettanto semplici ed intuitive.
Supponiamo di voler aggiungere una nuova proprietร "cilindrata" al nostro oggetto "auto". Per farlo scriveremo, semplicemente:
auto.cilindrata = 1800;
In sostanza, la sintassi per aggiungere una nuova proprietร ad un dato oggetto รจ la seguente:
nome_oggetto.nome_nuova_proprieta = valore
In alternativa possiamo utilizzare la sintassi con le parentesi quadre:
nome_oggetto[nome_nuova_proprieta] = valore
Utilizzando questa seconda sintassi potremo utilizzare anche dei nomi con degli spazi al loro interno, ad esempio:
auto["tipo di trazione"] = "integrale"
Verificare se un oggetto possiede una data proprietร
Vediamo come verificare se un oggetto possiede o meno una specifica proprietร . Per farlo utilizzeremo lโoperatore "in"; esso accetta come argomenti due operandi:
- a sinistra di "in" deve essere presente una stringa o qualsiasi altro elemento che a sua volta possa essere convertito in un stringa;
- a destra dellโoperatore deve invece essere indicato lโoggetto allโinterno del quale eseguire la ricerca della proprietร .
Questa la sintassi:
if ("nome_proprieta" in nome_oggetto) {
// ...
}
Si analizzi un semplice esempio:
var auto = new Object({
marca: "Audi",
modello: "A4"
});
var testMarca = "marca" in auto;
var testCilindrata = "cilindrata" in auto;
In questo caso, il primo controllo sullโoggetto "auto" restituirร TRUE, la proprietร "marca" รจ infatti associata ad esso, il secondo restituirร invece FALSE, in quanto la proprietร "cilindrata" non รจ presente nellโoggetto "auto".
Molto simile alloperatore "in" รจ il metodo hasOwnProperty().
Questโultimo, a differenza di "in", restituisce TRUE solo se la proprietร appartiene direttamente allโoggetto ("in" restituisce TRUE anche se la proprietร non รจ diretta ma รจ comunque presente nella catena di prototipi dellโoggetto).
La sintassi di hasOwnProperty() รจ la seguente:
if (nome_oggetto.hasOwnProperty("nome_proprieta")) {
// ...
}
Tornando allโesempio precedente avremmo potuto scrivere cosรฌ:
var auto = new Object({
marca: "Audi",
modello: "A4"
});
var testMarca = auto.hasOwnProperty("marca");
var testCilindrata = auto.hasOwnProperty("cilindrata");
Nel caso specifico lโesempio con "in" produrrร lo stesso risultato di questโultimo.
Eliminazione di proprietร di un oggetto
Lโeliminazione di proprietร avviene mediante lo statement delete secondo questa sintassi:
delete nome_oggetto.nome_proprieta
Tornando al nostro oggetto "auto" supponiamo di voler eliminare la proprietร "modello":
delete auto.modello;
Dโora in avanti, cercando di accedere a questa proprietร , lโinterprete Javascript ci restituirร un valore undefined.
Impostare una proprietร come "undefined" o "null" non ne determinerร lโeliminazione completa, sarร infatti eliminato il valore della proprietร ma non la chiave; quanto detto รจ dimostrabile attraverso un semplice esempio:
var auto = new Object({
marca: "Audi",
modello: "A4",
cilindrata: 1800
});
auto.marca = null;
auto.modello = undefined;
delete auto.cilindrata;
for(var i in auto) {
if (auto.hasOwnProperty(i)) {
console.log(i, '' + auto[i]);
}
}
Si verifichi nella console il risultato dello script: come potete vedere le proprietร "marca" e "modello" sono ancora regolamente presenti nellโoggetto "auto".
Nella prossima lezione della nostra guida vedremo le basi della programmazione ad oggetti con javascript.

