Il metodo $.extend()
di jQuery viene usato dai plugin principalmente per gestire l'ereditarietà su semplici oggetti contenenti le opzioni del plugin. In realtà lo scopo di questo metodo è quello di gestire completamente l'ereditarietà di qualsiasi tipo di oggetto JavaScript, non solo di quelli letterali. In questo articolo vedremo degli esempi in tal senso.
Gestire le istanze degli oggetti con costruttore
Le istanze create dagli oggetti definiti con un costruttore e utilizzando l'operatore new
possono essere gestite in questo modo:
var A = function(prop1, prop2) {
this.prop1 = prop1;
this.prop2 = prop2;
}
function B() {
this.method = function() {
var i, len = arguments.length;
for(i = 0; i < len; i += 1) {
console.log(arguments[i]);
}
};
}
var a = new A('Test 1', 'Test 2');
var b = new B();
var C = $.extend(a, b);
C.method(C.prop1, C.prop2);
Nella console vedremo questo output:
Test 1 Test 2
Gli oggetti A
e B
sono stati istanziati tramite l'operatore new
. Quindi le loro istanze sono state passate al metodo $.extend()
che ha creato l'oggetto C
.
La proprietà prototype
La proprietà prototype
dell'oggetto C
è ancora undefined
. Per ovviare a questa situazione possiamo usare il metodo $.extend()
su tale proprietà:
C.prototype = $.extend(a, b);
console.log(C.prototype.prop1);
console.log(C.prototype.prop2);
Nella console vedremo questo output:
Test 1 Test 2
Dato che tale proprietà è anche un oggetto, possiamo usarla per creare un nuovo oggetto che erediti dall'oggetto C
:
var D = $.extend(C.prototype);
console.log(D.prop1);
console.log(D.prop2);
Nella console vedremo questo output:
Test 1 Test 2
All'oggetto prototype
possiamo aggiungere nuove proprietà e metodi usando un nuovo oggetto per estenderlo:
$.extend(C.prototype, {
prop3: 'Test 3',
prop4: 'Test 4'
});
C.method(C.prop3, C.prop4);
Nella console vedremo questo output:
Test 3 Test 4
Anche se in precedenza prototype
era undefined
per l'oggetto C
, ora diviene necessariamente un oggetto definito con due proprietà.