首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能用纳什霍恩调用Java列表上的hasOwnProperty

不能用纳什霍恩调用Java列表上的hasOwnProperty
EN

Stack Overflow用户
提问于 2014-11-12 20:07:07
回答 2查看 1.6K关注 0票数 3

我有一个执行大量javascript服务器端的应用程序,我试图从Rhino转换到Nashorn,但是我的脚本遇到了麻烦。使用Rhino,我总是将函数的任何参数转换为JSON字符串,但这非常慢。对于Nashorn,我只是尝试将参数作为Java对象传递,但它们似乎并不继承Javascript的对象类型的函数。下面是一个示例方法,它说明了在我的数组中hasOwnProperty不可用的问题:

代码语言:javascript
复制
public String printArrayValues() throws ScriptException, NoSuchMethodException {

  String script =
      "function printArrayValues(objArray) {\n" +
      "  var result = '';\n" +
      "  for(var obj in objArray) {\n" +
      "    if(objArray.hasOwnProperty(obj)) {\n" +
      "      result = result + ' ' + objArray[obj];\n" +
      "    }\n" +
      "  }\n" +
      "  return result;\n" +
      "}";

  List<String> data = Arrays.asList(new String[]{ "one", "two", "three"});

  ScriptEngine scriptEngine = new NashornScriptEngineFactory().getScriptEngine();
  scriptEngine.eval(script);
  String result = (String) ((Invocable) scriptEngine).invokeFunction("printArrayValues", data);
}

在这里,对invokeFunction的调用将引发一个异常:

代码语言:javascript
复制
javax.script.ScriptException: TypeError: [one, two, three] has no such function "hasOwnProperty" in <eval> at line number 4

如果我在浏览器中调用相同的函数,我就得到了我所期望的:

代码语言:javascript
复制
> printArrayValues(["one", "two", "three"]);
> " one two three"

有什么方法可以做到这一点吗?这样我就可以使用这些Java对象,而不必将它们转换为JSON字符串,然后再把它们转换为Javascript对象。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-12 20:35:04

您不能以这种方式使用Java数组。Java数组是“硬连接”对象。与普通对象不同,它们没有方法,它们支持[]操作符,而对象不能。

这个关于甲骨文纳什霍恩的文章解释说,为了将Java.to数组更改为javascript数组,您需要使用Javascript中的Java.toJava.from方法。

票数 2
EN

Stack Overflow用户

发布于 2014-11-12 21:26:06

使用Java.from()List转换为Javascript Array,然后对其进行操作。

代码语言:javascript
复制
  String script =
  "function printArrayValues(objArray) {\n" +
  "  var result = '';\n var temp = Java.from(objArray);" +
  "  for(var obj in temp ) {\n" +
  "    if(temp .hasOwnProperty(obj)) {\n" +
  "      result = result + ' ' + temp [obj];\n" +
  "    }\n" +
  "  }\n" +
  "  return result;\n" +
  "}";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26895632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档