【发布时间】:2022-02-04 19:35:15
【问题描述】:
为了在 GraalVM JavaScript 上模仿 util.types 下的一些 Node 函数,我转向了可以通过 Java.type 或 Java 包全局变量访问的 Java 函数。 GraalVM 具有执行此操作的内部函数,例如 JSProxy.isJSProxy 和 JSSet.isJSSet。我通过将它们标记为导出、重新编译和测试它们来使它们可以访问(我使用例如Java.type("com.oracle.truffle.js.builtins.runtime.JSProxy").isJSProxy 访问它们)。
我发现,GraalVM JavaScript 的内部函数对我来说毫无用处。例如,JSProxy.isJSProxy 仅在传递JSProxyObject 的实例时才返回true。 Oracle 的 documentation 这么说
JavaScript 对象作为
com.oracle.truffle.api.interop.java.TruffleMap的实例暴露给Java 代码。这个类实现了 Java 的 Map 接口。
TruffleMap 没有出现在GraalVM JavaScript 的源代码中,并且在GraalVM 的源代码中只出现了一次,所以它很可能已被弃用,但那是多余的,因为表示方法可能是相同的。
无论现在 JS 对象的外部 Java 端表示是什么,它是否包含有关 JavaScript 端对象类型的信息?我可以确定它是否是 JS 代理吗?我可以确定它是否是Set 对象吗? (对于原生 JavaScript 对象类型等等。)
【问题讨论】:
标签: javascript java graalvm graaljs