在Java中是否有Nashorn的ScriptObjectMirror的公共和具体实例?

Kon*_*ong 6 java nashorn

我基本上想要去:

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/