JavaScript: gestire l'ereditarietà ed estendere gli oggetti

JavaScript: gestire l'ereditarietà ed estendere gli oggetti

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:

[caption id="attachment_1295" align="alignnone" width="188" caption="L'output del metodo extend() nella console mostra la fusione degli oggetti"]L'output del metodo extend() nella console[/caption]

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

Torna su