Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

L'overloading di metodi di John Resig

La tecnica di overloading di metodi di John Resig.
La tecnica di overloading di metodi di John Resig.
Link copiato negli appunti

John Resig, creatore e team leader del framework Javascript jQuery, ha messo a disposizione sul suo blog una funzione estremamente compatta che permette di effettuare l'overloading di metodi all'interno dei costruttori Javascript chiamata "addMethod". La tecnica del "method overloading" consente di differenziare il compito di un metodo a seconda del numero di parametri che gli vengono passati.

Ad esempio, supponiamo di avere un costruttore chiamato Fruits che contiene un array di stringhe e aggiungiamogli un metodo chiamato "find" con la funzione di Resig:

function Fruits(name, items){
   this.name = name;
   this.items = items || ['apple', 'pear', 'orange'];
}
// metodo find con zero parametri
addMethod(Fruits.prototype, "find", function(){
   alert('All items: ' + this.items);
});
// metodo find con un parametro
addMethod(Fruits.prototype, "find", function(name){
   var found = false;
   for(var i = 0; i<this.items.length; i++)
    if(this.items[i] == name) found = true;
   if(found)
    alert('One item found with name :"' + name + '"');
   else
    alert('No item found with name :"' + name + '"');
 });

Se richiamiamo il metodo find su di un'istanza di Fruits con zero parametri, verranno visualizzati tutti i frutti, ovvero 'apple', 'pear', 'orange'.

Se invece richiamiamo find con un parametro, il corpo della funzione cambia completamente come se fosse un'altra, visualizzando un messaggio positivo se il frutto passato è contenuto in Fruits oppure un messaggio negativo:

var user = new Fruits('My Fruits');
// visualizza tutti i frutti
user.find();
// se 'apple' è presente visualizza un messaggio opportuno
user.find('apple');

La tecnica che Resig ci fornisce è molto utile in applicazioni orientate agli oggetti e piuttosto avanzata, facendo uso di una proprietà  particolare e non molto nota come Function.length e di altre proprietà  specifiche del costruttore Function.

Ti consigliamo anche