Verwenden Sie nicht eval
es sei denn, Sie absolut, positiv keine andere Wahl haben.
Wie bereits erwähnt wurde, wäre es am besten, so etwas zu verwenden:
window["functionName"](arguments);
Das funktioniert jedoch nicht mit einer Funktion, die einen Namensraum hat:
window["My.Namespace.functionName"](arguments); // fail
So würden Sie das tun:
window["My"]["Namespace"]["functionName"](arguments); // succeeds
Um dies zu erleichtern und eine gewisse Flexibilität zu gewährleisten, gibt es eine praktische Funktion:
function executeFunctionByName(functionName, context /*, args */) {
var args = Array.prototype.slice.call(arguments, 2);
var namespaces = functionName.split(".");
var func = namespaces.pop();
for(var i = 0; i < namespaces.length; i++) {
context = context[namespaces[i]];
}
return context[func].apply(context, args);
}
Sie würden es so nennen:
executeFunctionByName("My.Namespace.functionName", window, arguments);
Beachten Sie, dass Sie jeden beliebigen Kontext übergeben können, so dass dies das Gleiche wie oben tun würde:
executeFunctionByName("Namespace.functionName", My, arguments);