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

Sobrecarga de métodos en javascript

John Resig, en su artículo JavaScript Method Overloading, presenta una forma simple de hacer sobrecarga de métodos en javascript. La idea es construír una función que se encargue de mapear, en función del número de parametros recibidos a las funciones que realmente hacen el trabajo. De ese modo es posible construir funciones con lógica diferente de acuerdo a los argumentos recibidos. Dado que las versiones actuales de Javascript no permiten definir tipos para los argumentos, no es posible hacer una distinción al estilo Java, sin embargo no deja ser interesante la posibilidad.

El código es bastante simple, pero efectivo

// addMethod - By John Resig (MIT Licensed)
function addMethod(object, name, fn){
     var old = object[ name ];
     if ( old )
         object[ name ] = function(){
             if ( fn.length == arguments.length )
                 return fn.apply( this, arguments );
             else if ( typeof old == 'function' )
                 return old.apply( this, arguments );
         };
     else
         object[ name ] = 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

Un problema que puede llegar a tener es la disminución en la performance ya que cada vez que se invoque una funcion sobrecargada se debe pasar por un proceso recursivo de elegir cual de todas las sobrecargas de la función se va a ejecutar. Como se puede ver del código es un proceso recursivo, donde primero se ejecuta la última definida, si esa no corresponde, se pasa a la anterior, y asi sucesivamente, por lo que cuantas mas sobrecargas se hagan menor performance se tendrá. De la anterior la recomendación sería definir las sobrecargas en orden creciente de uso, la más usada al final o no hacer sobrecarga en funciones de mucho uso ;) . Otra alternativa podría ser la de implementar una forma de sobrecarga que no haga uso de la recursión sino de una decisión simple.

Ver este tipo de cosas siempre es bueno, y útil para aprender cosas nuevas como por ejemplo fn.length que permite conocer el número de argumentos que existen en la definición de una función (fn)

Visto en: http://ajaxian.com/archives/javascript-method-overloading

Comments

3 comments for “Sobrecarga de métodos en javascript”

  1. [...] 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 [...]

    Posted by Concept&Development » Blog Archive » Sobrecarga de métodos en javascript (II) | November 16, 2007, 15:29
  2. Damm!!?, me tarde 1/2 hora tratando de enteder esta funcion!!, muy buena, muy buena, algo genio el que la invento

    Posted by Cesar | October 29, 2009, 0:40
  3. Definitivamente lo es… es quien hizo la librería jQuery (http://jquery.com)

    Posted by pviojo | November 16, 2009, 0:53

Post a comment

Mi nombre es Pablo Viojo y tengo 28 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
También puedes seguirme en twitter @tiopaul

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 [...]