2013-02-11 40 views
1

我正在處理一個包含大量用戶生成代碼的項目(受此視頻http://vimeo.com/36579366的啓發)。我想要做的是評估一個用戶輸入代碼塊,並在每次定義一個var時運行一個函數,或者2個變量相乘,或者發生其他一些操作。每當定義var時運行函數

有沒有辦法在JS中做到這一點?

很顯然,我可以在字段中搜索「var ...」,然後閱讀接下來的內容,然後根據這些信息做我需要做的任何事情,但出於多種原因,我寧願這樣做「合法地」在哪裏我實際上對被執行的東西作出反應。

回答

0

您可以在某些版本的Javascript(也稱爲代理)中使用Intercession API。從這裏你可以通過編寫自己的代碼來重新定義對象發生變化時發生的情況。

如果這是不可能的,但您事先知道變量的名稱,則可以使用setters, getters或使用填充爲Object.watch來實現相同的效果。

如果你不知道變量名是什麼,我建議通過像Esprima這樣的解析器運行用戶定義的Javascript來獲得AST。從這裏你可以直接在AST中注入任意語法,當你看到變量被定義(或掛起),然後編譯回工作代碼。您將使用"type": "VariableDeclaration"查找JSON對象。

+0

Esprima看起來很有前途。謝謝! – B1CL0PS 2013-02-12 04:36:04

相關問題