1

我有一些代码可以从脚本文件中加载一堆函数并将生成的 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 范围并将其父范围设置为加载文件中的缓存范围:

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 对象作为第二个参数?换句话说,它对 Scriptablethis实例和作为参数传入的实例有什么作用?文档对此并不清楚。

4

0 回答 0