Allo stato attuale dell'implementazione ECMAScript in uso nei maggiori browser, JavaScript non dispone di un metodo per estendere gli oggetti e gestire l'ereditarietà. Possiamo tuttavia emulare il funzionamento della parola chiave extends
in uso in altri linguaggi semplicemente aggiungendo un metodo extend()
all'oggetto base Object
. Vediamo i dettagli di questa soluzione.
L'implementazione è la seguente:
if(typeof Object.prototype.extend !== 'function') {
Object.prototype.extend = function() {
var objects = arguments,
obj = this,
len = objects.length,
i;
for(i = 0; i < len; i += 1) {
if(typeof objects[i] === 'object') {
for(var j in objects[i]) {
var prop = objects[i][j];
obj[j] = prop;
}
}
}
return obj;
};
}
Per prima cosa verifichiamo che il metodo che andremo a creare non esiste già nell'implementazione corrente. Quindi usiamo la proprietà arguments
della funzione verificando che i parametri passati siano oggetti. A questo punto uniamo le proprietà di tali oggetti all'oggetto corrente usando un ciclo for...in
.
Facciamo subito un test:
window.onload = function() {
var A = {
a: 'A'
};
function B() {
this.b = 'B';
}
var Test = {
test: function() {
return 'Test';
}
};
var C = {
c: 'C'
};
var b = new B();
C.extend(A, b, Test);
console.log(C);
};
L'oggetto C
estende gli oggetti A
, B
e Test
. L'output nella console è il seguente:

Come si può notare, l'oggetto finale eredita tutte le proprietà degli oggetti passati come argomenti al metodo extend()
.