Javascript可以获得文本功能吗?

时间:2010-07-31 21:36:56

标签: javascript reflection function tostring

Javascript可以获取文本功能吗? 我想的是eval()的倒数。

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

alert(derp.asString());

结果将类似于“a(); b(); c();”

它存在吗?

2 个答案:

答案 0 :(得分:33)

已更新,以便在 CMSTim DownMooGoo的以下评论中加入警告:

您可以接受的最接近的事情是在函数上调用.toString()以获取完整的函数文本,如下所示:

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

You can give it a try here,但需要注意的一些注意事项:

  • .toString() on函数是依赖于实现的Spec here部分 15.3.4.2
    • 来自规范:返回函数的依赖于实现的表示。此表示具有 FunctionDeclaration 的语法。请特别注意,表示字符串中的空格,行终止符和分号的使用和放置取决于实现。
    • Opera Mobile,早期Safari中的差异,都没有像我上面的例子那样显示来源。
  • Firefox在优化后返回已编译的函数,例如:
    • (function() { x=5; 1+2+3; }).toString() == function() { x=5; }

答案 1 :(得分:4)

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

alert(derp.toString());