我有一个对象,我想补充的全局命名空间的一些性质。 在对浏览器的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();
但由于犀牛没有全局的window对象,我不能这样做。 是否有一个相当于对象或其他方式来做到这一点?
你可以使用this
,它指的是全局对象,如果当前函数不叫为对象的方法。
我发现了一个相当辉煌的解决方案NCZOnline :
function getGlobal(){
return (function(){
return this;
}).call(null);
}
这一功能的关键是,这个对象总是指向全局对象随时使用的是call()
或apply()
并在空传递作为第一个参数。 由于空范围是无效的,解释插入全局对象。 该函数使用一个内部函数,以确保其范围是总是正确的。
呼叫使用:
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
”可能不是在这种情况下最好的变量名,虽然)。
另见: 我能创造一个“窗口”对象在犀牛的Java6脚本引擎中运行的JavaScript
我没有用犀牛但不能你只需要使用VAR?
即
var foo = myObject.foo; foo();
编辑:妈知道有好多有蹊跷! Miles的建议是在这种情况下围棋。