Network: Needish · clandescuento · Willka Travel & Adventures
// you’re reading...

Sobrecarga de métodos en javascript (II)

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

Comments

One comment for “Sobrecarga de métodos en javascript (II)”

  1. 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…

    Posted by pviojo | November 16, 2007, 15:38

Post a comment

Mi nombre es Pablo Viojo y tengo 27 años. Nací en Uruguay el 7 de agosto de 1981. Actualmente vivo en Santiago, Chile
Aparte de esto me interesa todo lo que tenga que ver con Internet y las nuevas tecnologías. Más info aquí, en mi hCard o en formato FOAF

View Pablo Viojo's profile on LinkedIn

Featured Posts

Romper paradigmas
February 23, 2009

A veces es necesario romper paradigmas…
¿Por qué la vista, o un elemento de la vista, no puede comunicarse con el modelo?
Paradigma: Un paradigma es —desde fines de la década de 1960— un modelo o patrón en cualquier disciplina científica u otro contexto epistemológico. El concepto fue originalmente específico de la gramática; en 1900 el diccionario [...]

Reedición: Microformatos, los bloques de la web semántica
November 18, 2008

¿Que son los microformatos?
Se trata de formatos de marcado XHTML, aplicables en contextos particulares, que utilizan los atributos definidos por los estándares para mejorar la semántica de los documentos. Son una herramienta muy util para aquellas estructuras que se repiten frecuentemente en documentos, ya sea que se trate de documentos creados por una persona, por [...]

La importancia del Undo en las Web Applications
November 11, 2008

Tomado de Needish the Blog, con permiso del autor
Robert O’Callahan, en su artículo The Essence Of Web Applications, resume algunos aspectos de las aplicaciones web y su relación con las aplicaciones de escritorio.
En lo personal no estoy muy de acuerdo con lo que opina, sobre todo cuando menciona aspectos relacionados con los elementos [...]

La importancia de las interfaces en los nuevos modelos de interacción web
May 14, 2006

Últimamente este blog ha tenido bastante poco movimiento, fundamentalmente debido a falta de tiempo por parte de quien escribe por estos lados.
Si bien tengo unos cuantos temas que me gustaría tocar, fundamentalmente porque en los últimos meses me ha tocado entrar en un área bastante nueva de la programación para la web (sí, esa, la [...]

Suscribe

Enter your email address: