JavaScript Rhino и создание динамической области видимости - PullRequest
0 голосов
/ 05 февраля 2010

Я пытаюсь определить динамическую переменную внутри функции в 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 (я думаю, что результат был бы значительно быстрее).

1 Ответ

3 голосов
/ 05 февраля 2010

Итак, в основном вы хотите что-то, что работает как JS with? * ухмыляется, уток и бежит *

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

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

test(context);
println(abc);

Имейте в виду, некоторые известные практики JS, такие как Даг Крокфорд, решительно не одобряют использование with.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...