为了在 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 对象类型,依此类推。)