1

プログラマー以外の人が仮想マルチプレイヤーバトルボットアリーナ用のサードパーティコードを作成するための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()同じサーバー上で毎秒多くの機能が実行されるので、これもパフォーマンスが高いと思います。

4

1 に答える 1

0

documentユーザースクリプトはテキストとして受信され、、などへのアクセスを制限する必要はないのでwindow(これはプライベートアプリケーションです)、eval()ingが最適なオプションです。

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