Peut Javascript obtenir une fonction comme texte?
Javascript peut obtenir une fonction comme texte?
Je pense comme l'inverse de la fonction eval().
function derp() { a(); b(); c(); }
alert(derp.asString());
Le résultat serait quelque chose comme "a(); b(); c();"
Existe-t-elle?
- Il est possible de convertir une fonction JavaScript pour le texte, et il est également possible de convertir le texte dans une fonction.
Vous devez vous connecter pour publier un commentaire.
Mis à jour pour inclure les mises en garde dans les commentaires ci-dessous à partir de CMS, Tim Bas, MooGoo:
La chose la plus proche à la disposition de ce que vous êtes après est l'appel de
.toString()
sur une fonction permettant d'obtenir la fonction complète de texte, comme ceci:Vous pouvez lui donner un essai ici, quelques mises en garde d'être au courant de si:
.toString()
sur la fonction est dépend de l'implémentation (Spec ici section 15.3.4.2)(function() { x=5; 1+2+3; }).toString()
==function() { x=5; }
object.toString()
méthode, dans le cas de fonctions que vous obtenez la pleine fonction de texte 🙂derp.length === 0
pour le nombre d'arguments,derp.name === "derp"
, vous pouvez.apply()
ou.call()
pour l'utilisation dans des fermetures (principalement mais pas exclusivement), etc...il y a beaucoup de JavaScriptfunction
...eh bien, de fonctionnalités que la plupart des gens, écrit-il jamais venu à travers. C'est malheureux, parce qu'il y a beaucoup de choses là-dedans, et c'est vraiment utile dans de nombreux cas.name
est non-standard et n'est pas pris en charge dans tous les navigateurs. Notables non-partisans comprennent (vous y croyez) IE.Function.prototype.toString
méthode retourne un "dépend de l'implémentation représentation de la fonction", et dans certaines implémentations (Opera Mobile et les Anciennes versions de Safari IIRC), il ne sera pas de retour dans le code source de la fonction, aussi laname
de propriété sur les objets de fonction est non standard..toString()
doivent être sans danger pour l'utilisation actuelle si vous l'utilisez à des fins d'affichage, la spec dit qu'il doit avoir la syntaxe d'une déclaration de fonction:function Identifier (FormalParameterList) { FunctionBody }
. Donc si c'est dépendant de l'implémentation doit (comme d'ECMAscript v3) ressemblent à peu près comme ci-dessus (avec des différences dans l'espace blanc principalement). Si un navigateur (par exemple, les anciennes Safari) ne suivent pas les spec...j'ai tendance à voir que ce que le navigateur est la faute de.(function() { x=5; 1+2+3; }).toString()
retourne"function () { x = 5; }"
. Le plus amusant est cependantfunction() { x=5+4; }
serait retourné comme"function () { x = 9; }"
FunctionExpression
, comme(function() {}).toString()
renvoie une chaîne qui n' pas représenter la grammaire d'uneFunctionDeclaration
:"function () {}"
, obligatoireIdentifier
jeton est manquant... BTW, j'ai trouvé les questions où l'Opéra Mobile PrototypeJS et jQuery échouer.