我如何在犀牛的对象属性添加到全局对象中的JavaScript(How can I add an ob

2019-07-30 13:58发布

我有一个对象,我想补充的全局命名空间的一些性质。 在对浏览器的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对象,我不能这样做。 是否有一个相当于对象或其他方式来做到这一点?

Answer 1:

你可以使用this ,它指的是全局对象,如果当前函数不叫为对象的方法。



Answer 2:

我发现了一个相当辉煌的解决方案NCZOnline :

function getGlobal(){
  return (function(){
    return this;
    }).call(null);
}

这一功能的关键是,这个对象总是指向全局对象随时使用的是call()apply()并在空传递作为第一个参数。 由于空范围是无效的,解释插入全局对象。 该函数使用一个内部函数,以确保其范围是总是正确的。

呼叫使用:

var glob = getGlobal();

glob ,然后将返回[object global]在犀牛。



Answer 3:

下面是我如何在过去所做的那样:

// Rhino setup
Context jsContext = Context.enter();
Scriptable globalScope = jsContext.initStandardObjects();

// Define global variable
Object globalVarValue = "my value";
globalScope.put("globalVarName", globalScope, globalVarValue);


Answer 4:

你可以只定义自己的window对象作为一个顶级变量:

var window = {};

然后,您可以请你把值赋给它。 (“ window ”可能不是在这种情况下最好的变量名,虽然)。

另见: 我能创造一个“窗口”对象在犀牛的Java6脚本引擎中运行的JavaScript



Answer 5:

我没有用犀牛但不能你只需要使用VAR?

 var foo = myObject.foo; foo(); 

编辑:妈知道有好多有蹊跷! Miles的建议是在这种情况下围棋。



文章来源: How can I add an object property to the global object in rhino javascript