0

Rhino JavaScript(特にJava 6に埋め込まれているもの)の関数内で動的変数を定義しようとしていますが、evalに頼りたくないので、これを介して参照する必要はありません。基本的に、私はオブジェクトを取得し、すべてのプロパティを関数のスコープ内の変数に変換したいと思います...次のようなものです。

var abc = "value";
var context = { abc: 123, xyz: "def" };

function test(cx) {
  for (var p in cx) {
    this_scope[p] = cx[p];
  }

  println(abc);
  // DON'T WANT TO HAVE TO DO THIS:
  // pritnln(this.abc);
}

test(context); // prints: 123
println(abc); // prints: value

信じられないかもしれませんが、私が「これ」を使わなければならないかどうかは重要です。(これは動的に生成された関数であり、さまざまなコンテキストオブジェクトで何度も呼び出したいので、すべての変数に「this」を使用すると非常に有害になります)。

また、新しいエンジンコンテキストなどを取得する必要がないようにしたいのですが、JavaScriptでこれを直接実行できれば、すばらしい結果が得られると思います(結果は大幅に高速になると思います)。

4

1 に答える 1

3

だから、基本的にあなたはJSのように機能するものが欲しいですwithか?*ニヤリとアヒル、そして走る*

var abc = "value";
var context = {abc: 123, xyz: "def"};

function test(cx) {
    with (cx) {
        println(abc);
    }
}

test(context);
println(abc);

Doug Crockfordのような有名なJS実践者は、の使用を強く非難していることに注意してwithください。

于 2010-02-04T23:55:27.560 に答える