Nashorn:名称空间内的调用函数

Erc*_*sen 4 javascript java namespaces nashorn

我已经使用评估了以下脚本NashornScriptEngine

var Namespace = {
    test: function()
    {
        return "It works";
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我要调用该函数test

使用invokeFunctionnashorn引擎的方法时,将引发以下异常:

java.lang.NoSuchMethodException: No such function Namespace.test
Run Code Online (Sandbox Code Playgroud)

如何调用此函数?

Jua*_*des 5

您正在尝试访问名为window["Namespace.test"]而不是的全局函数window.Namespace.Test。您首先需要获得对的引用Namespace,然后可以调用invocable.invokeMethod指定Namespace作为其上下文(this)。

例如,要调用JSON.parse(),可以使用以下命令:

Object json = engine.eval("JSON"); // Or "Namespace" in your case
Object data = invocable.invokeMethod(json, "parse", contactJson); //"test" for the case you mention
Run Code Online (Sandbox Code Playgroud)