Подтвердить что ты не робот

Может ли Javascript получить функцию в виде текста?

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

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

alert(derp.asString());

В результате получилось бы нечто вроде "a(); b(); c();"

Он существует?

4b9b3361

Ответ 1

Обновлено, чтобы включить предостережения в комментарии ниже CMS, Tim Down, MooGoo:

Ближайшая вещь, доступная для того, что вам нужно, вызывает .toString() функцию, чтобы получить полный текст функции, например

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

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

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

Ответ 2

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

alert(derp.toString());