2010-07-31 12 views
20

Kann Javascript eine Funktion als Text bekommen? Ich denke wie die Umkehrung von eval().Kann Javascript eine Funktion als Text bekommen?

function derp() { a(); b(); c(); } 

alert(derp.asString()); 

Das Ergebnis wäre etwas wie "a(); b(); c();"

Existiert es?

+0

Es ist möglich, eine JavaScript-Funktion, um Text zu konvertieren, und es ist auch möglich, [den Text wieder in eine Funktion umzuwandeln] (http://stackoverflow.com/questions/2573548/given-a-string-scribing-a-jazascript-function-convert-it-to-a-java Skript-Funktion). –

Antwort

32

Aktualisiert Einsprüche in den Kommentaren vonCMS, Tim Down, MooGoo unten enthalten:

Die nächste Sache zur Verfügung, was Sie nach .toString() auf eine Funktion ruft die volle Funktionstext, wie diese zu erhalten :

function derp() { a(); b(); c(); } 
alert(derp.toString()); //"function derp() { a(); b(); c(); }" 

You can give it a try here, um einige Einschränkungen von sich aber bewusst:

  • .toString() Die Funktion ist auf implementierungsabhängigen (Spec here Abschnitt 15.3.4.2)
    • Vom spec: eine implementierungsabhängige Darstellung der Funktion zurückgegeben wird. Diese Darstellung hat die Syntax einer FunctionDeclaration. Beachten Sie insbesondere, dass die Verwendung und Platzierung von Leerzeichen, Zeilenabschlüssen und Semikola innerhalb der Repräsentationszeichenfolge implementierungsabhängig ist.
    • Notiert Unterschiede in Opera Mobile, früher Safari, keine Quelle wie mein Beispiel oben angezeigt.
  • Firefox gibt eine kompilierte Funktion, nach der Optimierung, zum Beispiel:
    • (function() { x=5; 1+2+3; }).toString() == function() { x=5; }
+0

@delnan - Verschiedene Objekte überschreiben die 'object.toString()' Methode, im Falle von Funktionen erhalten Sie die volle Funktion Text :) –

+0

Ich wusste, js war sehr dynamisch, reflektierend, hat erstklassige Funktionen, etc. Aber das ist ... nun, ich weiß nicht, ob es ein tolles oder unnötiges Bling-Bling ist. Eine Mischung aus beidem, denke ich. – delnan

+0

Wow, der Code wird auch schön formatiert ...! – Brandon

3
function derp() { a(); b(); c(); } 

alert(derp.toString()); 
Verwandte Themen