我必须使用 Rhino1.7R4 及其 org.mozilla.javascript 包移植软件才能使用 javax.script 包它的ScriptEngine(Java 6中的 Rhino ,Java 8中的 Nashorn )。
主要问题是堆栈范围(Bindings)。 使用犀牛罐,我做:
Scriptable scope ...
Scriptable newScope = javascriptContext.initStandardObjects();
newScope.setParentScope(scope);
所以
这是JS的标准行为。
如何使用javax.script API执行与 setParentScope 相同的操作?
答案 0 :(得分:1)
我在JDK中找到的javax.script.Bindings
实现都没有任何类型的递归查找。我认为您唯一的选择就是编写一个自定义Bindings
实现,该实现可以回退到父Bindings
。
编辑:仅在Nashorn下(不是Rhino,对不起),我认为jdk.nashorn.api.scripting.ScriptObjectMirror
可能更有能力,因为它有setProto()
来更改原型对象。有关ScriptObjectMirror
的更多信息,请访问:https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes