Может ли Javascript получить функцию в виде текста? - PullRequest
21 голосов
/ 01 августа 2010

Может ли Javascript получить функцию в виде текста?Я думаю, как обратное к eval ().

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

alert(derp.asString());

Результатом будет что-то вроде "a (); b (); c ();"

Существует ли оно

Ответы [ 2 ]

33 голосов
/ 01 августа 2010

Обновлено с учетом предостережений в комментариях ниже от CMS , Тим Даун , MooGoo :

Самым близким к тому, что вам нужно, является вызов .toString() функции для получения полного текста функции, например:

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

Вы можете попробовать это здесь , хотя некоторые предупреждения следует учитывать:

  • Функция .toString() on зависит от реализации ( Спецификация здесь section 15.3.4.2 )
    • Из спецификации: Возвращается зависящее от реализации представление функции. Это представление имеет синтаксис FunctionDeclaration . В частности, обратите внимание, что использование и размещение пробелов, ограничителей строки и точек с запятой в строке представления зависит от реализации.
    • Отмеченные различия в Opera Mobile, раннем Safari, также не отображают источник, как в моем примере выше.
  • Firefox возвращает скомпилированную функцию после оптимизации, например:
    • (function() { x=5; 1+2+3; }).toString() == function() { x=5; }
4 голосов
/ 01 августа 2010
function derp() { a(); b(); c(); }

alert(derp.toString());
...