N'utilisez pas eval
à moins que vous absolument, positivement n'ont pas d'autre choix.
Comme cela a été mentionné, utiliser quelque chose comme ceci serait la meilleure façon de le faire :
window["functionName"](arguments);
Toutefois, cela ne fonctionnera pas avec une fonction utilisant un espace de nom :
window["My.Namespace.functionName"](arguments); // fail
C'est comme ça qu'il faut faire :
window["My"]["Namespace"]["functionName"](arguments); // succeeds
Pour faciliter cette tâche et offrir une certaine souplesse, voici une fonction pratique :
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);
}
Vous l'appelleriez comme ça :
executeFunctionByName("My.Namespace.functionName", window, arguments);
Notez que vous pouvez passer dans n'importe quel contexte que vous voulez, donc ceci ferait la même chose que ci-dessus :
executeFunctionByName("Namespace.functionName", My, arguments);