为了在 GraalVM JavaScript 上模仿 Node 下的一些函数util.types,我转向了可以访问Java.type的 Java 函数或 Java 包全局变量。GraalVM 具有类似的内部功能,JSProxy.isJSProxy并且JSSet.isJSSet可以执行此操作。我通过将它们标记为导出、重新编译和测试它们来使它们可访问(我使用例如,访问它们Java.type("com.oracle.truffle.js.builtins.runtime.JSProxy").isJSProxy)。
我发现,GraalVM JavaScript 的内部函数对我来说毫无用处。例如,JSProxy.isJSProxy仅true在传递JSProxyObject. 甲骨文的文档说
JavaScript 对象作为
com.oracle.truffle.api.interop.java.TruffleMap. 这个类实现了 Java 的 Map 接口。
TruffleMap 没有出现在GraalVM JavaScript的源代码中,并且只出现在GraalVM的源代码中一次,因此它很可能已被弃用,但这并不重要,因为表示方法可能是相同的。
无论 JS 对象的外部 Java 端表示是什么,它是否包含有关 JavaScript 端对象类型的信息?我可以确定它是否是 JS 代理吗?我可以确定它是否是一个Set对象吗?(对于原生 JavaScript 对象类型,依此类推。)