[英]How can I add an object property to the global object in rhino javascript
我在一個對象中有一些屬性,我想添加到全局命名空間。 在瀏覽器的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沒有全局窗口對象,我無法做到這一點。 有沒有一個等效的對象或其他方式來實現這一目標?
我在NCZOnline找到了一個非常出色的解決方案:
function getGlobal(){
return (function(){
return this;
}).call(null);
}
此函數的關鍵是,只要您使用
call()
或apply()
並將null作為第一個參數傳入,此對象始終指向全局對象。 由於null作用域無效,因此解釋器會插入全局對象。 該函數使用內部函數來確保范圍始終正確。
使用呼叫:
var glob = getGlobal();
然后glob
會在Rhino中返回[object global]
。
您可以使用this
,如果當前函數未被調用為對象的方法,則引用全局對象。
以下是我過去的做法:
// 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
”可能不是這種情況下最好的變量名。)
我沒有使用過rhino,但你不能只使用var嗎?
即
var foo = myObject.foo;
foo();
編輯:該死的知道會有一個問題! 邁爾斯的建議就是那種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.