Ante todo gracias por responder kepawe.
Lo que me planteas me abre los ojos, porque no sabia que se podia hacer esto:
Código PHP:
function f(x,y) {
return x*y;
}
function ejecutador(fun,x,y) {
alert( eval(fun)(x,y) );
}
ejecutador(f,2,3);
Lo que yo hacia, precariamente, era extraer el nombre de la funcion (con tratamiento de cadenas), y ocuparme de los argumentos como has hecho tu:
Código PHP:
function ejecutador(funcion) {
//guardamos el nombre, para llamarla
var nombre=funcion.toString().substring("function ".length, funcion.toString().indexOf("(") );
//guardamos tambien los argumentos
var argumentos="";
for(var a=1;a<arguments.length;a++)
argumentos+=arguments[a]+",";
argumentos=argumentos.substring(0,argumentos.length-",".length); //le quitamos la ultima coma
Y luego llamaba a la funcion, segun fuera el navegador, con la idea de caricatos:
Código PHP:
//Caso Internet Explorer
if(document.all) {
eval(funcion);
return eval("window['"+nombre+"']("+argumentos+")");
}
//Otros casos
else {
var scrNuevo = document.createElement("script");
scrNuevo.innerHTML = funcion;
document.body.appendChild(scrNuevo);
return eval(nombre+"("+argumentos+")");
}
}
Asi que bueno, si esta solucionado el tema, podemos dar la duda como despejada.
Gracias a los dos otra vez!