Sicuramente il design pattern basato sull'oggetto prototype
è quello che meglio si adatta alla natura di JavaScript. Infatti in JavaaScript l'ereditarietà è gestita interamente da tale oggetto. Vediamo in dettaglio questo design pattern.
Per questo design pattern occorre separare l'oggetto prototype
dall'oggetto JavaScript che lo userà. Tale oggetto utilizzerà prototype
solo per l'inizializzazione dei suoi membri:
var vehiclePrototype = {
init: function(carModel) {
this.model = carModel;
},
getModel: function() {
alert('The model of this vehicle is ' + this.model);
}
};
function Vehicle(model) {
function F() {};
F.prototype = vehiclePrototype;
var f = new F();
f.init(model);
return f;
}
L'oggetto Vehicle
utilizza un oggetto vuoto (come suggerito da Douglas Crockford) e lo restituisce dopo averne impostato la proprietà prototype
sull'oggetto vehiclePrototype
. Il metodo init()
, come suggerito dal nome, inizializza la proprietà model
ereditata dall'oggetto prototype
. Esempio:
var car = Vehicle('Ferrari');
car.getModel();
Potete visionare l'esempio finale in questa pagina.