Siguiendo la linea del post anterior (Sobrecarga de métodos en javascript), dejo otra forma de hacer lo mismo, ahora sin usar recursión para buscar la función correcta, por lo que la degradación de performance no debería crecer con el número de sobrecargas
// addMethod - By Pablo Viojo (MIT Licensed), based on addMethod by John Resig (MIT Licensed)
function addMethod(object, name, fn){
if ( !object[ name ] )
object[ name ] = function(){
if ( object[ "_ovld_"+name+"_"+arguments.length ] ){
return object[ "_ovld_"+name+"_"+arguments.length ].apply( this, arguments )
}
return null;
}
object[ "_ovld_"+name+"_"+fn.length ] = fn;
}
// Now setup the methods
function Users(){
addMethod(this, "find", function(){
// Find all users...
});
addMethod(this, "find", function(name){
// Find a user by name
});
addMethod(this, "find", function(first, last){
// Find a user by first and last name
});
}
// Now use the methods
var users = new Users();
users.find(); // Finds all
users.find("John"); // Finds users by name
users.find("John", "Resig"); // Finds users by first and last name
users.find("John", "E", "Resig"); // Does nothing
Lo que se hace en este caso es crear una función, solamente cuando se hace la primera definición, con el nombre de la sobrecargada (ej: find), y una funcion de nombre “_ovld_{nombre de la funcion}_{numero de argumentos}” (ej: _ovld_find_1, _ovld_find_2) que es la función real a ejecutar. Al invocar la funcion (find) esta se encarga, en función del numero de parametros de invocar a la función sobrecargada si esta existe.
Lo he probado con IE 6, y Firefox 2 sin problemas, si alguien lo utiliza en otro ambiente y funciona o falla, agradezco lo comente

Je, parece que olvidé publicar estos artículos cuando los escribí, y en estos momentos otros ya han tenido la misma idea, incluso mejorandola. Igualmente fue un buen ejercicio mental…