L'overloading dei metodi di un oggetto è una pratica molto comune in molti linguaggi di programmazione. JavaScript in tal senso non fa eccezione ma presenta delle caratteristiche assolutamente peculiari.
La soluzione più usata al momento è stata implementata da John Resig in modo molto semplice.
function addMethod( object, name, fn ) {
// Salva un riferimento al vecchio metodo
var old = object[ name ];
// Sovrascrive il metodo
object[ name ] = function() {
// Verifica il numero di argomenti
if( fn.length == arguments.length ) {
return fn.apply( this, arguments );
} else if( typeof === "function" ) {
return old.apply( this, arguments );
}
};
}
In pratica questa funzione di utility determina se usare o meno il nuovo metodo in base al numero di argomenti passati. Un numero diverso di argomenti rispetto al metodo originale indica che il metodo è stato modificato.