124 votes

Existe-t-il un moyen de créer une fonction à partir d'une chaîne de caractères avec javascript ?

Par exemple ;

var s = "function test(){
  alert(1);
}";

var fnc = aMethod(s);

Si c'est la chaîne, je veux une fonction qui s'appelle fnc. Et fnc(); L'écran d'alerte s'affiche.

eval("alert(1);") ne résout pas mon problème.

7voto

David Newberry Points 109

Cette technique est peut-être en fin de compte équivalente à la méthode eval, mais je voulais l'ajouter, car elle pourrait être utile à certains.

var newCode = document.createElement("script");

newCode.text = "function newFun( a, b ) { return a + b; }";

document.body.appendChild( newCode );

Cela revient fonctionnellement à ajouter cet élément <script> à la fin de votre document, par exemple :

...

<script type="text/javascript">
function newFun( a, b ) { return a + b; }
</script>

</body>
</html>

4voto

Fernando Carvajal Points 597

Utilisez le new Function() avec un retour à l'intérieur et l'exécuter immédiatement.

var s = `function test(){
  alert(1);
}`;

var new_fn = new Function("return " + s)()
console.log(new_fn)
new_fn()

2voto

brunettdan Points 637

Un exemple avec des arguments dynamiques :

let args = {a:1, b:2}
  , fnString = 'return a + b;';

let fn = Function.apply(Function, Object.keys(args).concat(fnString));

let result = fn.apply(fn, Object.keys(args).map(key=>args[key]))

0 votes

Merci. Très intéressant

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