プログラマー以外の人が仮想マルチプレイヤーバトルボットアリーナ用のサードパーティコードを作成するためのAPIを作成しています。グローバルを使用するための構文は素晴らしいでしょう:
function Step() {
if (sensor.wall) {
movement.brake();
movement.turnLeft();
}
if (sensor.enemy) {
movement.shoot()
}
if (movement.speed < 1) {
movement.accelerate(.1);
}
}
上記の例のグローバルはとにsensor
なりmovement
ます。スクリプトライターは、それらがどこから来たのかは気にせず、アクセス可能であるだけです。(いいえ、これは最終的な構文ではありません。ここでプロトタイプを作成するだけです。)
スクリプトは、クライアント(ブラウザー)とサーバー(ノードまたはSpidermonkeyを介して)の両方で実行されます。
だから、これを行う方法は?私の選択肢は次のようです。
- すべてのグローバルを字句的に設定して
eval()
からスクリプトを設定します(しかし、それは悪いことですよね?) - すべてのグローバルをグローバルスコープに設定してから、スクリプトを通常どおり実行します(ただし、DOMグローバルについては
window
どうでしょうか?)
GoogleCajaを使ってグローバルスコープを確保できたと思います。Step()
同じサーバー上で毎秒多くの機能が実行されるので、これもパフォーマンスが高いと思います。