gpt4 book ai didi

java - 宿主对象上的 set 方法

转载 作者:行者123 更新时间:2023-12-02 01:41:39 24 4
gpt4 key购买 nike

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();

我期待输出 hi 但我没有得到输出。

我想知道 javascript(context.eval 部分)是否没有更新我提供的主机对象(new Thing())。

最佳答案

这里有两个问题:

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

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

public interface Thing {
void run();
}
Context context = Context.create("js");
Value jsobj = context.eval("js", "({run: () => console.log('hi')})");
Thing javaobj = jsobj.as(Thing.class);
javaobj.run();

关于java - 宿主对象上的 set 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54388834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com