61 votes

Obtenir une fonction-objet JavaScript à partir de son nom sous forme de chaîne ?

En JavaScript, si j'ai une chaîne de caractères dans une variable, y a-t-il un moyen d'obtenir une référence à l'objet fonction qui a le même nom ? Notez que jQuery est à ma disposition et que je peux donc utiliser n'importe laquelle de ses méthodes d'aide.

Par exemple :

myFunction = function(){};

var func_name = "myFunction";
var myFunctionPtr = ???  //how to get the function from the name

Gracias

79voto

mkoryak Points 18135

Si vous savez que c'est une fonction globale que vous pouvez utiliser :

var functPtr = window[func_name];
//functPtr()

Sinon, remplacez fenêtre avec l'objet parent contenant la fonction.

26voto

rmeador Points 15107

Je viens de faire un test rapide dans Firebug et j'ai pu obtenir la fonction à partir du nom en utilisant simplement les éléments suivants eval() le nom... Je me sens sale d'utiliser eval() mais il semble que le travail soit bien fait ici.

var myFunctionPtr = eval(func_name);

21voto

o.v. Points 11173

Ce n'est jamais une approche privilégiée. Au lieu de conserver le nom de la fonction dans func_name vous auriez pu conserver la référence à une fonction avec autant de succès dans quelque chose comme func_to_call .

Si vous devez absolument conserver la référence de la fonction sous la forme d'une chaîne de caractères, vous utiliserez généralement une table de hachage pour faire correspondre un nom arbitraire à une variable (JS dispose de fonctions de première classe, ce qui le rend possible).

myFunction = function(){};   
var obj = {func_name: myFunction};

obj['func_name']();//executes the function

Fiddled (Je ne sais pas pourquoi, c'est un si petit script :)

Il a été suggéré d'utiliser eval(func_name) - Toutefois, cela pourrait rapidement devenir incontrôlable en raison de la délimitation du champ d'application de la JS.

Vous avez également déclaré votre myFunction = function(){}; comme une variable globale. D'une part, cela vous permet de la référencer en tant que window[func_name] mais d'un autre côté, cela pollue la portée globale.

12voto

Max Schmeling Points 6295

This[func_name] devrait vous donner la fonction.

var myfunc = this[func_name];
myfunc();

3voto

Jon Benedicto Points 7020

Utilisez l'évaluation :

myFunction = function(){};

var func_name = "myFunction";
var myFunctionPtr = eval(func_name);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X