Existe-t-il un moyen en javascript d’obtenir la définition d’une fonction donnée sous forme de chaîne, pour éventuellement la modifier et l’évaluer?

StackOverflow https://stackoverflow.com/questions/1430761

  •  07-07-2019
  •  | 
  •  

Question

J'essaie d'évaluer une fonction dans un nouveau contexte, c'est-à-dire qui contient un certain mot défini qui n'existe pas dans la portée. C'est assez facile si j'ai la définition de la fonction en tant que chaîne, mais j'aimerais pouvoir le faire avec une liste régulière de fonctions, comme ceci:

var funcs = {
  first: function() { return 'yayaya'; },
  second: function() { return 'okokok' + keyword; },
  ...
};

puis plus tard:

function Thing () {};

for (func in funcs) {
  var definition = funcs[func].definition();
  var keyword = "NOW I AM THE KEYWORD";
  var actual_func_with_keyword_defined = eval(definition);
  Thing.prototype[func] = actual_func_with_keyword_defined;
}

Ce qui me manque, c'est la fonction definition () ou son équivalent, qui retourne la source de la fonction. Est-ce possible en javascript?

Était-ce utile?

La solution

Cela fonctionnera, même si je suis sûr qu'il existe une solution plus longue et plus élégante:

function foo() {
}
var bar = '' + foo; //type cast to a string by adding an empty string
alert(bar);

Autres conseils

Essayez simplement de supprimer .definition () .

La méthode standard JS consiste à appeler toString () sur la fonction. Comme si:

function myFun() {}

myFun.toString() // gives "function myFun() {}",
                 // potentially with white space differences
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top