是否可以使用ScriptEngine在java中提取JavaScript函数实现

时间:2017-11-20 07:42:10

标签: javascript java scriptengine

假设我有一个JS函数,

function sum(a,b){
  return a+b;
}
var a = sum(10,20);

现在,如果我使用ScriptEngine执行此操作,如下所示

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
engine.eval(inputString);
Bindings bindings = engine.getBindings(100);
for(String s:bindings.keySet()){
    System.out.println(engine.get(s)); 
}

总是给出评估值,如a = 30。所以我的问题是也可以从ScriptEngine获得function sum(a,b){...}

有一种方法可以将encodedSource作为

InterpretedFunction.class.cast(bindings.get("sum")).getEncodedSource()

但有什么东西可以解码来源吗?

1 个答案:

答案 0 :(得分:0)

将eval的引擎转换为Invocable会让您了解许多有用的功能:

private Invocable getInvocableJSEngine() throws ScriptException {
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
    engine.eval(script);
    return (Invocable) engine;
}

...

getInvocableJSEngine().invokeFunction("sum",a,b);