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.