javascript-通过JS中的函数引用对java对象的Nashorn调用方法(通过绑定)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-通过JS中的函数引用对java对象的Nashorn调用方法(通过绑定),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1499字,纯文字阅读大概需要3分钟。
内容图文
![javascript-通过JS中的函数引用对java对象的Nashorn调用方法(通过绑定)](/upload/InfoBanner/zyjiaocheng/669/89bca4a2dce940b6af990ae8c8480154.jpg)
我想将本机Java对象放入ScriptEngine绑定中,以便于访问.
scriptEngine.put("myApi", myApiInstance);
这里的“ myApiInstance”具有一个非静态方法“ foo()”.
现在在JS中我有一个功能:
someJsFunction(func) { func.call(...) }
但是电话
someJsFunction(myApiInstance.foo)
结果为“ TypeError:func.call不是函数”.
另一方面,“ myApiInstance.foo()”可以按预期工作.
看起来像ScripEngine的细节,因为“ call()”方法应该在任何函数中都可用.
是的,“ typeof myApiInstance.foo”返回“ function”
解决方法:
Java方法和函数接口对象(lambda对象)被视为脚本函数,因此可以照常从JavaScript调用.正如您在此类对象上提到的“ typeof”会返回true.您可以直接从脚本中调用它们.但是就这些没有其原型为Function.prototype的意义而言,这些不是真正的JS函数对象.就是说,如果您想使用Function.prototype.call或.apply来调用它们,[例如,您正在分派给任何传递的可调用对象],则可以执行以下操作:
import javax.script.*;
public class Main {
public static void main(String[] args) throws Exception {
ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine e = m.getEngineByName("nashorn");
// get the java static method to call
e.eval("var getProp = java.lang.System.getProperty");
// direct call
e.eval("print(getProp('java.home'))");
// call using Function.prototype.call
e.eval("print(Function.prototype.call.call(getProp, null, 'java.home'))");
// a java object
e.eval("var out = java.lang.System.out");
// get an instance method
e.eval("var p = out.println");
// call java instance method using Function.prototype.call
e.eval("Function.prototype.call.call(p, out, 'hello world')");
}
}
内容总结
以上是互联网集市为您收集整理的javascript-通过JS中的函数引用对java对象的Nashorn调用方法(通过绑定)全部内容,希望文章能够帮你解决javascript-通过JS中的函数引用对java对象的Nashorn调用方法(通过绑定)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。