Il tipo di oggetti più usato in assoluto in JavaScript è quello che si ottiene usando come costruttore una funzione. Questo tipo di pattern presenta alcuni vantaggi. Innanzitutto è molto più semplice gestire la visibilità dei suoi membri usando le variabili o la parola chiave this
. Un altro aspetto da considerare è l'inizializzazione ed esecuzione del codice all'interno di questi oggetti. Dato che si tratta di funzioni (le funzioni, ricordiamolo, sono first-class citizen) possiamo usare il loro valore di ritorno per eseguire il codice dei loro metodi usando un'unica chiamata ad un metodo di inizializzazione. Vediamo come.
Abbiamo questo oggetto:
function A() {
var priv = 'Test';
this.init = function() {
alert(priv);
};
}
Normalmente dovremmo prima istanziare l'oggetto e quindi usare il suo metodo:
var a = new A();
a.init(); // 'Test'
Esiste un modo molto semplice per automatizzare questo processo: usare return
. In fondo l'oggetto è pur sempre una funzione, quindi il seguente codice:
function A() {
var priv = 'Test';
this.init = function() {
alert(priv);
};
return this.init();
}
usato con la sola instanziazione:
var a = new A(); // 'Test'
produrrà il risultato voluto. Dato che si tratta sempre di una funzione, è anche possibile scrivere:
var a = A(); // 'Test'
per ottenere lo stesso risultato, ossia l'esecuzione del metodo principale dell'oggetto.