簡體   English   中英

如何在rhino javascript中將對象屬性添加到全局對象

[英]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 ”可能不是這種情況下最好的變量名。)

另請參閱: 我可以為Java6 Rhino腳本引擎中運行的javascript創建“窗口”對象

我沒有使用過rhino,但你不能只使用var嗎?


var foo = myObject.foo;
foo();

編輯:該死的知道會有一個問題! 邁爾斯的建議就是那種情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM