Sie müssen lediglich einen Kontext verwenden oder einen neuen Kontext definieren, in dem sich Ihre Funktion(en) befinden. Sie sind nicht beschränkt auf window["f"]();
Hier ist ein Beispiel dafür, wie ich einige dynamische Aufrufe für einige REST-Dienste verwende.
/*
Author: Hugo Reyes
@ www.teamsrunner.com
*/
(function ( W, D) { // enclose it as self invoking function to avoid name collisions.
// to call function1 as string
// initialize your FunctionHUB as your namespace - context
// you can use W["functionX"](), if you want to call a function at the window scope.
var container = new FunctionHUB();
// call a function1 by name with one parameter.
container["function1"](' Hugo ');
// call a function2 by name.
container["function2"](' Hugo Leon');
// OO style class
function FunctionHUB() {
this.function1 = function (name) {
console.log('Hi ' + name + ' inside function 1')
}
this.function2 = function (name) {
console.log('Hi' + name + ' inside function 2 ')
}
}
})(window, document); // in case you need window context inside your namespace.
Wenn Sie die gesamte Funktion aus einer Zeichenkette erzeugen wollen, ist das eine andere Antwort. Beachten Sie bitte auch, dass Sie nicht auf einen einzigen Namensraum beschränkt sind, wenn Ihr Namensraum als my.name.space.for.functions.etc.etc.etc
der letzte Zweig Ihres Namensraums enthält die Funktion als my.name.space.for.functions.etc.etc["function"]();
Ich hoffe, es hilft. H.