Java脚本引擎(nashorn&;rhino):如何堆叠作用域/绑定?
我必须使用Rhino1.7R4及其org.mozilla.javascript包移植一个软件,以使用javax.script包及其脚本引擎(Rhino在Java6和7中,Nashorn在Java8中) 主要问题是堆栈作用域(绑定)。 使用Rhino罐,我会:Java脚本引擎(nashorn&;rhino):如何堆叠作用域/绑定?,java,rhino,nashorn,scriptengine,javax.script,Java,Rhino,Nashorn,Scriptengine,Javax.script,我必须使用Rhino1.7R4及其org.mozilla.javascript包移植一个软件,以使用javax.script包及其脚本引擎(Rhino在Java6和7中,Nashorn在Java8中) 主要问题是堆栈作用域(绑定)。 使用Rhino罐,我会: Scriptable scope ... Scriptable newScope = javascriptContext.initStandardObjects(); newScope.setParentScope(scope); 所以
Scriptable scope ...
Scriptable newScope = javascriptContext.initStandardObjects();
newScope.setParentScope(scope);
所以
- 如果定义的变量没有var,则它是全局变量(根范围)
- 如果变量是用var定义的,则它是局部变量(当前范围)
- 如果访问或修改变量,引擎将在其当前作用域中查找、父级和父级。。。以及全球范围
如何使用javax.script API执行与setParentScope相同的操作?我在JDK中找到的
javax.script.Bindings
实现都没有任何递归查找。我认为您唯一的选择是编写一个定制的Bindings
实现,它可以返回到父Bindings
编辑:仅在Nashorn下(抱歉,不是Rhino),我认为
jdk.Nashorn.api.scripting.ScriptionObjectMirror
可能更有能力,因为它有setProto()
来更改原型对象。有关ScriptObjectMirror
的详细信息,请参见:API不够。不知道变量的赋值是全局的还是局部的(他的语句中有或没有“var”关键字)。