Как добавить свойство объекта к глобальному объекту в javascript Rhino?

StackOverflow https://stackoverflow.com/questions/1162998

  •  18-09-2019
  •  | 
  •  

Вопрос

У меня есть некоторые свойства объекта, которые я хотел бы добавить в глобальное пространство имен.В javascript в браузере я мог бы просто добавить его в window объект так:

var myObject = {
  foo : function() {
    alert("hi");
  }
  // and many more properties
};

for (property in myObject) {
  window[property] = myObject[property];
}

// now I can just call foo()
foo();

Но поскольку у Rhino нет объекта глобального окна, я не могу этого сделать.Есть ли эквивалентный объект или какой-то другой способ сделать это?

Это было полезно?

Решение

Вы могли бы использовать this, который ссылается на глобальный объект, если текущая функция не вызывается как метод объекта.

Другие советы

Я нашел довольно блестящее решение на NCZОнлайн:

function getGlobal(){
  return (function(){
    return this;
    }).call(null);
}

Ключом к этой функции является то, что этот объект всегда указывает на глобальный объект каждый раз, когда вы используете call() или apply() и передайте значение null в качестве первого аргумента. Поскольку нулевая область действия недопустима, интерпретатор вставляет глобальный объект. Функция использует внутреннюю функцию, чтобы гарантировать, что область видимости всегда правильна.

Позвоните, используя:

var glob = getGlobal();

glob потом вернется [object global] в Рино.

Вот как я делал это раньше:

// Rhino setup
Context jsContext = Context.enter();
Scriptable globalScope = jsContext.initStandardObjects();

// Define global variable
Object globalVarValue = "my value";
globalScope.put("globalVarName", globalScope, globalVarValue);

Вы можете просто определить свой собственный window объект как переменная верхнего уровня:

var window = {};

Затем вы можете присвоить ему значения по своему усмотрению.(«window", вероятно, не лучшее имя переменной в этой ситуации.)

Смотрите также: Могу ли я создать объект «окно» для javascript, работающего в Java6 Rhino Script Engine?

Я не использовал Rhino, но не могли бы вы просто использовать var?

то есть


var foo = myObject.foo;
foo();

Редактировать:Черт знал, что будет подвох!В этом случае предложение Майлза будет удачным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top