Partage
  • Partager sur Facebook
  • Partager sur Twitter

StringToFunction

Est-ce possible, en JS?

Sujet résolu
    24 mars 2011 à 22:01:47

    Bonsoir,

    Est-il possible de transformer une chaîne de caractères en un corps de fonction?

    Si oui, quelqu'un pourrait-il me guider, svp? :)
    • Partager sur Facebook
    • Partager sur Twitter
      24 mars 2011 à 22:26:22

      Oui c'est possible mais c'est assez déconseillé comme tout ce qui fait appel à eval (même si c'est de manière caché)
      Il suffit d'utiliser new Function(arg1,arg2,argx...,taFonction)
      arg1,... représentent les arguments éventuels pour ta fonction
      taFonction représente la chaine qui devra être exécuté lorsque la fonction sera appelée.

      si tu ne mets qu'un seul argument cela signifie que la fonction générée n'aura pas d'argument

      ex:
      var f=new Function("txt","alert('ceci est ma fonction qui affiche le texte:\\n'+txt);");
      f('toto');
      

      • Partager sur Facebook
      • Partager sur Twitter
        24 mars 2011 à 22:30:31

        Merci mais si new Function() utilise eval, il n'existe pas une bonne pratique pour faire des fonctions dynamiques?
        • Partager sur Facebook
        • Partager sur Twitter
          24 mars 2011 à 22:39:15

          Qu'est-ce que tu veux faire exactement?
          Car si c'est l'utilisateur qui entre un bout de code qui doit être exécuté, alors tu n'as pas le choix, tu sera obligé de passer par eval.

          Si c'est pour de l'optimisation de fonction, pour utiliser un code plutôt qu'un autre, tu peux créer plusieurs fonctions mais une seule est reliée à la variable qui sera appelée (cependant cette méthode est plus coûteuse côté mémoire).
          • Partager sur Facebook
          • Partager sur Twitter
            24 mars 2011 à 22:42:16

            @Golmote: encore toi, à me contrarier? xD

            @Restimel: le truc, c'est que je transforme une fonction en chaine pour pouvoir tester les éléments qu'il y a dedans, y ajouter ou en enlever des éléments et la retransformer en fonction (sans pour autant l'exécuter).
            • Partager sur Facebook
            • Partager sur Twitter
              24 mars 2011 à 22:47:19

              Tu n'as pas le choix...

              EDIT : C'est toujours pour ton projet des précédents topics ? Je vois pas à quoi ça va te servir...
              • Partager sur Facebook
              • Partager sur Twitter
                24 mars 2011 à 22:49:04

                Ben dans ce cas t'as pas trop le choix, tu vas devoir passer par eval (ou une de ses formes cachées comme celle que j'ai présentée avec new Function)

                Grillé: mais comme t'as l'air d'être fâché avec Golmote je répond quand même :lol:
                • Partager sur Facebook
                • Partager sur Twitter
                  24 mars 2011 à 22:53:22

                  Ce serait tout de même plus pratique, pour l'utilisateur de ma lib', plutôt que de le forcer à créer des objets avec une propriété name, afin de faire une recherche dessus...

                  Suis pas fâché avec, juste que pour 75% des trucs que je demande, il me dit que c'est impossible... ^^

                  Merci, tout de même, à vous.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 mars 2011 à 23:19:57

                    Je comprends pas mieux l'intérêt...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 mars 2011 à 23:28:44

                      Ben, c'est assez simple, à l'action de l'internaute, on peut vouloir modifier la méthode liée aux évènements de certains objets.

                      Et, lors du déclenchement de ces nouvelles méthodes, pouvoir restaurer celles qui étaient fixées à l'origine.

                      Donc, plutôt que de tout recoder, on enlèverait juste ce qui a été ajouté lors du premier évènement.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 mars 2011 à 0:04:05

                        Ah oui ça y est ça me revient, on avait déjà discuté de ça. Mais moi je persiste à penser que ce serait faisable avec un Array de fonctions que tu exécutes dans un ordre déterminé, à l'aide d'une fonction anonyme.

                        Ainsi, il te suffit de modifier l'Array pour retirer des fonctions. (Des parties de la fonction anonyme)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        StringToFunction

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown