Bonjour à tous,
J'aimerais savoir comment récuperer les noms des arguments d'une fonction en dehors de celle-ci.
Merci d'avance
Version imprimable
Bonjour à tous,
J'aimerais savoir comment récuperer les noms des arguments d'une fonction en dehors de celle-ci.
Merci d'avance
c'est ceux que tu as tapé à la mano... :lol:
(aucun intérêt de connaitre leur nom).
tu récupère à partir du tag sc ri pt puis tu fais un regex qui tue...
A vrai dire c'était pour enregistrer la fonction en string pour la stocker, j'ai cru que ça n'enregistrait pas les arguments, mais en fait je me suis rendu compte que le problème venait d'ailleurs!
J'ai un script du type :
cependant, si je fais alert(a.affProps), firefox afficheCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 function a() { this.affProps=function() { for( var i in this) alert(i); } this.prop1="coucou"; } var b=new a(); b.affProps(); // affiche prop1
Quelqu'un aurait une idée de pourquoi? Ca me gène beaucoup parce que du coup le texte est inutilisable....Code:
1
2
3
4
5
6 function affProps() { while(this) alert(i); }
PS Matthieu2000 si jamais t'as un regex qui permet de récuperer une fonction entière, je suis prenneur!
(si il gère des conneries du genre function a(){ alert('}') } )
et
?Code:alert(a.affProps())
Non, en fait le but est de récuperer le texte de la fonction, afin de pouvoir la stocker, je ne veux pas l'executer.
Si tu regardes bien les deux bouts de code, la définition de la fonction a changé, firefox a changé un for(var i in this) par un while(this), ce qui n'a rien à voir...
Essaie ca
C'est la même chose, tostring, tosource, ou rien, ça me transforme ma source :(
je recupère bien un string ...Code:
1
2 var string=b.affProps.toString() alert(string)
Salut,
Je ne vois pas l'intéret de récupérer le nom des parametres d'une fonction, peux tu préciser ce que tu veux en faire ?
Ce qui est interressant, c'est de savoir combien de paramètres sont attendus.
pour ça tu peux utiliser la propriété length de la fonction (ou apparament arity mais qui ne fonctionne pas sous IE7)...
Plus de détails
L'histoire des arguments c'était une erreur de ma part, due à un comportement "bizarre" de firefox (v2, je n'ai pas tésté sous v3)... Ceci n'arrive pas sous google chrome ou IE...
Teste un code simple comme ça :
là, la fonction fonctionne correctement, cependant on peut voir le code affiché par le alert dans firefox2 qui afficheCode:
1
2
3
4
5
6
7
8
9
10
11 maFonction=function() { this.a={}; for( var i in this) alert(i); } var objet={propA:"a",propB:"b"} maFonction.apply(objet); alert(maFonction)
while(this) au lieu de for( var i in this)
donc, si on fait :
Ca ne fonctionne plus! i sera considéré comme undefined.Code:
1
2
3
4
5 var str=maFonction.toString(); eval(str); maFonction.apply(objet);
Donc je cherchais un moyen de contourner ceci, pour l'instant j'ai modifié ma fonction à enregistrer avec un eval("for(var i in this)...."), mais ce n'est pas une solution!
Après vérification, ça a été changé sur firefox3, mais bon, ça ne résous pas mon problème :(
J'ai besoin de stocker (via greasemonkey... mais ça pourrait être dans un cookie ou autre) un objet entier, contenant des fonctions.