我在一个对象中有一些属性,我想添加到全局命名空间.在浏览器的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();
Run Code Online (Sandbox Code Playgroud)
但由于rhino没有全局窗口对象,我无法做到这一点.有没有一个等效的对象或其他方式来实现这一目标?
pne*_*ook 10
我在NCZOnline找到了一个非常出色的解决方案:
function getGlobal(){
return (function(){
return this;
}).call(null);
}
Run Code Online (Sandbox Code Playgroud)
此函数的关键是,此对象始终在您使用时始终指向全局对象,
call()
或者apply()
传入null作为第一个参数.由于null作用域无效,因此解释器会插入全局对象.该函数使用内部函数来确保范围始终正确.
使用呼叫:
var glob = getGlobal();
Run Code Online (Sandbox Code Playgroud)
glob
然后将返回[object global]
Rhino.
您可以使用this
,如果当前函数未被调用为对象的方法,则引用全局对象.
小智 5
以下是我过去的做法:
// Rhino setup
Context jsContext = Context.enter();
Scriptable globalScope = jsContext.initStandardObjects();
// Define global variable
Object globalVarValue = "my value";
globalScope.put("globalVarName", globalScope, globalVarValue);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8562 次 |
最近记录: |