Bonjour à tous,
J'aimerais savoir comment récuperer les noms des arguments d'une fonction en dehors de celle-ci.
Merci d'avance
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...
(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 affiche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 affiche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager