Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/08/2010, 15:47
Avatar de zerokilled
zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Ejecutar función cuyo nombre se le pasa como parámetro a otra función

se puede hacer, pero depende de las circunstancias. la funcion tiene que ser accesible en forma de metodo de un objeto. es decir, no puede ser una funcion en una variable local de un scope porque entonces no hay forma de invocarla -al menos yo no encuentro la forma-. la clave esta en usar la sintaxis asoaciativa en un objeto.
Código:
// funcion que recibe el nombre de otra funcion;
function fn(name){
return self[name]();
}

// una funcion cualquiera;
function _fn(){
// ...;
}

// invocamos la funcion pasando como parametro el nombre en string;
fn("_fn");
este ejemplo funciona porque las funciones y variables definidas en el ambito global son propiedades del contexto global, en el caso de los navegadores el objeto window.

Código:
// funcion que recibe el nombre de otra funcion;
function fn(name){

// una funcion cualquiera;
function _fn(){
// ...;
}

// como invocar?
return ¿?[name]();
}


// invocamos la funcion pasando como parametro el nombre en string;
fn("_fn");
en este ejemplo fijate que _fn esta definido dentro de fn. sin embargo, ¿como se puede hacer referencia a esa funcion interna usando la forma anterior? en este caso habria que hacer referencia al objeto scope de la funcion fn pero en javascipt no existe forma de referencia un objeto scope. por tanto, no se puede invocar la funcion usando la sintaxis asociativa.

fijate que no es necesario definir la funcion como global, sino que simplemente sea accesible desde un objeto.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 25/08/2010 a las 15:54