Nombres de Funciones dinámicos con JavaScript

Si te toca hacer aplicaciones un poco avanzadas con JavaScript, vas a toparte con un problema en un punto u otro donde vas a necesitar generar dinámicamente el nombre de una función que quieras llamar. Algo como el equivalente a call_user_func() de PHP.

Algo así es como podés hacerlo:

// Definimos algunas variables
var foo = "Hola";
var bar = "Mundo";
var nombre_funcion = "decir_" + foo + bar;

/*  Dado que estamos generandolo dinámicamente,
* siempre hay que asegurarse de que la función
* exista en realidad. */

if (typeof(window[nombre_funcion]) === "function")
{
	window[nombre_funcion](" Mundo!");
}
else
{
	throw("Error.  La función " + nombre_funcion + " no existe...duh!");
}

function decir_holaMundo(la_palabra)
{
	alert("Hola " + la_palabra);
}

// Browser va a alertar un trilladísimo "Hola Mundo!"

Cuando lo pensás un rato, tiene mucho sentido considerando que todos los objetos globales en JavasScript son en realidad propiedades del objeto “window”. Fijate en este ejemplo de manzanas y naranjas para entender un poco mejor el concepto.

var foo = "manzana";

function foobar()
{
	var foo = "naranja";
	alert(window["foo"]); // alerta "manzana"
	alert(foo); // alert "naranja"
	alert(window["foobar"]); // alerta la función foobar
}

foobar();

Acá hay otro ejemplo de cuando usar strings para llamar una función puede ser útil. Esta vez llamamos la propiedad de un objeto que hemos creado.

function Persona()
{
	this.mensaje = "Hola Mundo!";
	this.decir_hola = function(a)
	{
		alert(this.mensaje);
	}
}

var Yeco = new Persona();
nombre_funcion = "decir_hola";
Yeco[nombre_funcion]();

Ves como es casi lo mismo que el método de arriba usando una función global?

Espero que te sirva en algún momento.

blog comments powered by Disqus
  • Mail
  • Delicious
  • Digg
  • StumbleUpon
  • Twitter
  • Technorati