Javascript可以获得文本功能吗?

Bra*_*don 24 javascript reflection function tostring

Javascript可以获得文本功能吗?我想的是eval()的反转.

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

alert(derp.asString());
Run Code Online (Sandbox Code Playgroud)

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

它存在吗?

Nic*_*ver 36

更新以在 CMS,Tim Down,MooGoo 的评论中包含警告:

你所接触的最接近的东西是调用.toString()函数来获取完整的函数文本,如下所示:

function derp() { a(); b(); c(); }
alert(derp.toString()); //"function derp() { a(); b(); c(); }"
Run Code Online (Sandbox Code Playgroud)

你可以在这里尝试一下,但需要注意一些注意事项:

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

  • @Nick,这几乎适用于所有浏览器,但也许值得一提的是``Function.prototype.toString`方法返回"*依赖于实现的*函数表示",在某些实现中(Opera Mobile和旧版Safari)版本IIRC)它不会返回函数的源代码,函数对象的`name`属性也是*非标准*. (3认同)
  • 谢谢你们,我做了很棒的功能!http://pastebin.com/07dLguEP (2认同)
  • @Nick,是的,但我认为规范在几乎所有实现中都应该更正式,规范.然后不是*严格遵循*,例如,匿名`FunctionExpression`,如`(function(){}).toString()`返回一个字符串,它**表示`FunctionDeclaration`的语法:`" function(){}"`,缺少必需的`Identifier`标记...... BTW我发现了Opera Mobile制作[PrototypeJS](http://j.mp/a8cyVa)和[jQuery fail]的问题( http://j.mp/bv9yOs). (2认同)

CD.*_*D.. 5

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

alert(derp.toString());
Run Code Online (Sandbox Code Playgroud)