【发布时间】:2012-02-13 06:58:03
【问题描述】:
这与this other SO question about arrays非常相似。
如果我评估:
y = {a: 1, b: 2, "momomomo": function() { return "hi"; }, zz: "wham"}
在通过 JSR223 (ScriptingEngine) 实例化的 Javascript 脚本中,我得到了某种 NativeObject(我在 Eclipse 的调试器中看到了这个)并且不知道如何访问它的属性。此外,我什至不知道哪个 .jar 文件(如果有),我需要添加到我的构建路径才能使用相关类,如果我找到一种适用于 Rhino Javascript 的方法,它对Jython。
似乎 JSR223 应该包含对 ScriptingEngine 的与语言无关的访问方法,以提供将返回的对象包装为数组的 List<Object> 或关联数组的 Map<String, Object> 的能力。
有什么建议吗?
【问题讨论】:
-
您是否查看过关于如何访问 Java 对象的 Rhino 文档? mozilla.org/rhino/ScriptingJava.html
-
是的,但它更侧重于如何从 Javascript 访问 Java 对象。我想做的恰恰相反:从 Java 访问 Javascript 对象。这也令人困惑,因为我实际上并没有使用 Rhino 的 js.jar,我使用的是 SE 6 发行版中的 javax.script 类,所以我不知道如何让 sun.org.mozilla.* 进入我的构建路径,甚至我是否应该这样做。
-
查看 Java 数组转 JavaScript 数组模式:mozilla.org/rhino/faq.html
-
但那是我在 Javascript 中做的。 (它是地图而不是数组) 关键是,我有使用我的应用程序执行 Javascript 的用户。作为 Java 应用程序程序员,我不知道脚本会产生什么值,但我需要能够从 Java 中 分析和/或操作该值。如果它是一个数组,我可能需要获取数组长度和元素。我不能只告诉我的用户“不要使用 Javascript 数组,你会被这种奇怪的语法困住,你必须使用 java.lang.reflect.Array.newInstance 创建数组。”他们会看着我,就像我有两个脑袋一样。