小编典典
我对Rhino并不是很熟悉,但是这样的方法应该可以工作:
for(var fn in utils) {
if(typeof utils[fn] === 'function') {
this[fn] = (function() {
var method = utils[fn];
return function() {
return method.apply(utils,arguments);
};
})();
}
}
只需遍历的属性utils,并为每个作为函数的属性创建一个调用它的全局函数。
编辑:我在Groovy脚本中工作了,但是我必须在绑定中而不是像您的代码那样在引擎上设置utils:
import javax.script.*
class Utils {
void foo(String bar) {
println bar
}
}
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
engine.eval("""
for(var fn in utils) {
if(typeof utils[fn] === 'function') {
this[fn] = (function() {
var method = utils[fn];
return function() {
return method.apply(utils,arguments);
};
})();
}
}
foo('foo'); // prints foo, sure enough
""",new SimpleBindings("utils":new Utils()))
2020-10-09