Как добавить свойство объекта к глобальному объекту в javascript Rhino?
-
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();
Редактировать:Черт знал, что будет подвох!В этом случае предложение Майлза будет удачным.