在主机对象上设置方法

时间:2019-01-27 13:50:29

标签: java java-11 graalvm

$(...).show(400 /* duration*/,function myCompleteCallback() {...})

我期望输出public class Thing { public Thing() { } public void run() { } public void out(String s) { System.out.println(s); } } Context context = Context.create("js"); Value jsBindings = context.getBindings("js"); jsBindings.putMember("this", new Thing()); context.eval("js", "this.run = () => this.out('hi');"); jsBindings.getMember("this").getMember("run").execute(); context.close(); ,但没有输出。

我想知道javascript(hi部分)是否没有更新我为其提供的宿主对象(context.eval)。

1 个答案:

答案 0 :(得分:2)

这里有两个问题:

  1. putMember("this", new Thing())修改全局this,但在全局对象中放置一个名为this的属性,可通过{{1}访问}。 恐怕“我该如何设置全局”的答案是:你不能。

  2. 无法分配给主机(即Java)对象方法。但是,您可以使用Value.as(Class)使用JS对象来实现Java接口,例如您可以执行以下操作:

this.this