【问题标题】:Run function whenever var is defined每当定义 var 时运行函数
【发布时间】:2013-02-11 20:07:11
【问题描述】:
我正在开发一个包含大量用户生成代码的项目(受此视频 http://vimeo.com/36579366 启发)。我想做的是 eval() 一段用户输入代码,并在每次定义 var 时运行一个函数,或者乘以 2 个变量,或者发生其他一些操作。
有没有办法在 JS 中做到这一点?
显然,我可以在字段中搜索“var ...”,然后阅读接下来的内容,然后对这些信息做任何我需要做的事情,但是,出于多种原因,我宁愿这样做“合法地”,我实际上对正在执行的事情做出反应。
【问题讨论】:
标签:
javascript
eval
user-input
user-defined-functions
【解决方案1】:
您可以在某些版本的 Javascript(也称为代理)中使用 Intercession API。由此,您可以通过编写自己的代码重新定义对象发生变异时会发生什么。
如果这不可行,但你事先知道变量的名称,你可以使用setters, getters,或者Object.watch 的polyfill 来达到同样的效果。
如果您不知道变量名称是什么,我建议您通过 Esprima 之类的解析器运行用户定义的 Javascript 以获取 AST。当您看到正在定义(或提升)的变量时,您可以将任意语法直接注入 AST,然后编译回工作代码。您将使用"type": "VariableDeclaration" 查找 JSON 对象。