スクリプト ファイルから一連の関数をロードし、結果の 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(...);
次に、実行中にこれらの関数を任意に呼び出す別のルーチンがあります。これらのルーチンの複数のインスタンスが並行して実行されている可能性があり、それらが互いに干渉しないようにするため、実行ごとに子スクリプト可能スコープをロードし、その親スコープをロードされたファイルからキャッシュされたスコープに設定します。
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 オブジェクトを 2 番目のパラメーターとして受け取るのはなぜですか? つまり、Scriptablethis
インスタンスと引数として渡されたインスタンスに対して何を行うのでしょうか? ドキュメントはこれについて明確ではありません。