定义var时运行函数

时间:2013-02-11 20:07:12

标签: javascript eval user-input user-defined-functions

我正在开发一个包含大量用户生成代码的项目(受此视频http://vimeo.com/36579366启发)。我想要做的是eval()一大块用户输入代码,并在每次定义var时运行一个函数,或者两个变量相乘,或者发生一些其他操作。

有没有办法在JS中执行此操作?

显然,我可以在字段中搜索“var ...”,然后阅读接下来会发生的事情,然后做我需要做的任何事情,但是,出于多种原因,我宁愿这样做“合法地“我实际上对正在执行的事情做出反应。

1 个答案:

答案 0 :(得分:0)

您可以在某些版本的Javascript(也称为代理)中使用Intercession API。通过编写自己的代码,您可以从中重新定义对象发生变化时发生的情况。

如果这不可能,但您事先知道变量的名称,则可以使用setters, gettersObject.watch的polyfill来达到相同的效果。

如果您不知道变量名称是什么,我建议通过Esprima之类的解析器运行用户定义的Javascript来获取AST。当您看到变量被定义(或提升)时,您可以直接将任意语法注入AST,然后编译回工作代码。您将使用"type": "VariableDeclaration"查找JSON对象。