我基本上想要去:
ScriptObjectMirror myObj = new ConcreteScriptObjectMirror();
Run Code Online (Sandbox Code Playgroud)
然后像这样调用一些JS,myObj参数在哪里:
function myJSFunc(param) {
with(param) {
return paramProperty;
}
}
Run Code Online (Sandbox Code Playgroud)
我现在正在这样做,但Nashorn正在抱怨:
TypeError:无法对非脚本对象应用"with"
因此,我传入的Java对象需要是ScriptObjectMirror的一个实例.
小智 1
由于 ScriptObjectMirror 是最终的,因此您无法从此类进行扩展。Nashorn 引擎使用 ScriptObjectMirror 将 javascript 对象传递到 Java 端,而不是相反。
当从 java 代码调用 javascript 函数时,您可以将任意 java 对象传递给该函数:
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(new FileReader("myScript.js"));
Invocable invocable = (Invocable) engine;
Object result = invocable.invokeFunction("myJSFunc", "Peter Parker");
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)
有关更多示例,请参阅本文:http://winterbe.com/posts/2014/04/05/java8-nashorn-tutorial/