1

我正在为非程序员创建一个 API,以便为虚拟多人战斗机器人竞技场编写第三方代码。使用全局变量的语法会很好:

function Step() {
    if (sensor.wall) {
        movement.brake();
        movement.turnLeft();
    }
    if (sensor.enemy) {
        movement.shoot()
    }
    if (movement.speed < 1)  {
        movement.accelerate(.1);
    }
}

上例中的全局变量是sensorand movement。剧本作者不在乎它们来自哪里,只关心它们是可访问的。(不,这不是最终的语法。这里只是原型。)

脚本将在客户端(浏览器)和服务器(通过 Node 或 Spidermonkey)上运行。

那么,如何做到这一点呢?看来我的选择是:

  • 在词法上设置所有全局变量然后eval()是脚本(但这很糟糕,对吧?)
  • 在全局范围内设置所有全局变量,然后正常运行脚本(但是 DOM 全局变量呢,比如window?)

我可能可以使用Google Caja来保护全局范围。我也希望这是高性能的,因为许多Step()功能将在同一台服务器上每秒运行。

4

1 回答 1

0

由于用户脚本是作为文本接收的,我不关心限制对document,window等的访问(这是一个私有应用程序),eval()ing 是最好的选择。

function evaluateScript(movement, sensor, content) {
    return eval(content);
}
于 2012-08-07T16:05:28.087 回答