我有一些代码从脚本文件加载一堆函数,并将生成的Scriptable作用域缓存在内存中:
Scriptable loadScript(File file)
{
Context ctx = _contextFactory.enterContext();
ctx.setOptimizationLevel(9);
Scriptable scope = ctx.initStandardObjects();
InputStreamReader reader = new FileReader(file);
ctx.evaluateReader(scope, reader, scriptPath.getName(), 0, null)
Context.exit();
return scope;
}
Scriptable parentScope = loadScript(...);
然后我有另一个例程,在执行过程中任意调用这些函数。这些例程可能有多个并行运行的实例,我不希望它们相互干扰,因此对于每次执行,我加载一个子Scriptable作用域,并将其父作用域设置为加载文件中的高速缓存作用域: / p>
Context ctx = _contextFactory.enterContext();
Scriptable childScope = ctx.newObject(parentScope);
childScope.setParentScope(parentScope);
要在Java中调用JavaScript函数,我会执行以下操作:
Function f = (Function)parentScope.get(methodName, childScope);
f.call(...);
我的问题是关于最后get()
方法。为什么,如果它是Scriptable的实例方法,它是否需要另一个Scriptable对象作为第二个参数?换句话说,它对Scriptable this
实例和作为参数传入的实例有什么作用?文档不清楚。