我正在为非程序员创建一个 API,以便为虚拟多人战斗机器人竞技场编写第三方代码。使用全局变量的语法会很好:
function Step() {
if (sensor.wall) {
movement.brake();
movement.turnLeft();
}
if (sensor.enemy) {
movement.shoot()
}
if (movement.speed < 1) {
movement.accelerate(.1);
}
}
上例中的全局变量是sensor
and movement
。剧本作者不在乎它们来自哪里,只关心它们是可访问的。(不,这不是最终的语法。这里只是原型。)
脚本将在客户端(浏览器)和服务器(通过 Node 或 Spidermonkey)上运行。
那么,如何做到这一点呢?看来我的选择是:
- 在词法上设置所有全局变量然后
eval()
是脚本(但这很糟糕,对吧?) - 在全局范围内设置所有全局变量,然后正常运行脚本(但是 DOM 全局变量呢,比如
window
?)
我可能可以使用Google Caja来保护全局范围。我也希望这是高性能的,因为许多Step()
功能将在同一台服务器上每秒运行。