2013-02-11 6 views
1

Я работаю над проектом с большим количеством созданного пользователем кода (вдохновленный этим видео http://vimeo.com/36579366). То, что я хочу сделать, - это eval() кусок кода ввода пользователя и запускать функцию каждый раз, когда определяется var, или умножаются две переменные или происходит какое-то другое действие.Выполнить функцию всякий раз, когда var определен

Есть ли способ сделать это в JS?

Очевидно, что я мог бы искать в поле «var ...», а затем читать то, что будет дальше, а затем делать все, что мне нужно для этой информации, но по ряду причин я бы предпочел сделать это «законно», где я фактически реагирую на что-то исполняемое.

ответ

0

Вы можете использовать Intercession API в некоторых версиях Javascript (также известных как прокси). Из этого вы можете переопределить, что происходит, когда объекты мутируют, написав свой собственный код.

Если это невозможно, но вы знаете имена переменных заранее, вы можете использовать setters, getters или полиполк для Object.watch для достижения такого же эффекта.

Если вы не знаете имена переменных, я рекомендую запустить пользовательский Javascript через парсер, например Esprima, чтобы получить AST. Из этого вы можете ввести произвольный синтаксис непосредственно в AST, когда увидите переменные, которые были определены (или подняты), а затем скомпилированы в рабочий код. Вы будете искать объекты JSON с "type": "VariableDeclaration".

+0

Esprima выглядит многообещающим. Благодаря! – B1CL0PS

Смежные вопросы