【问题标题】:Spider monkey : Why JS array is not inheriting default properties like length, splice etc蜘蛛猴:为什么 JS 数组不继承长度、拼接等默认属性
【发布时间】:2012-03-22 06:57:00
【问题描述】:

我实际上对蜘蛛猴 api 和这个邮件列表都是新手。实际上我试图创建一个像 objectA.arrayA 这样的数组,回调代码是这样的。

    char *value[] = {"abc", "xyz", "efg"};
    int count = 0;
    JSObject* val = JS_NewArrayObject(pContext, 0, NULL);

    while(count < 3) {
        jstr = JS_NewStringCopyZ(pContext, value[count]);

        JS_DefineElement(pContext, val, count++, STRING_TO_JSVAL(jstr),
                        NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT);
    }

    vJs->DefineProperty(pObject, "arrayA", OBJECT_TO_JSVAL(val));

我得到了 objectA.arrayA 的正确值,但是当我执行 objectA.arrayA.length 时,它说 arrayA 没有 ay 属性。你能告诉我我做错了什么吗?即使我在制造刺痛,我也面临着同样的情况。

【问题讨论】:

  • 你为什么将它标记为 C ? this 和 C 之间的联系在哪里?
  • 以上代码 sn-p 来自一个 c/c++ 应用程序。这就是为什么
  • 如果您需要 JS 方面的帮助,请不要使用C 标记。如果不是问题的问题,请不要使用标签
  • 它不是 javascript @Eregrith 是 JavaScript API。大不同。

标签: javascript c++ spidermonkey javascript-engine


【解决方案1】:

您的第一个明显问题是:

JS_NewArrayObject(pContext, 0, NULL);

你有零的地方应该是你的数组的所需长度。

对我来说很明显你不知道如何使用 API。我相信与您的问题相关的文档可以在以下位置找到:

https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_NewArrayObject

https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_DefineProperty

https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_DefineElement

和: https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JSClass.addProperty

https://developer.mozilla.org/en/SpiderMonkey/JSAPI_Reference/JS_PropertyStub

这五个页面包含破解密码所需的所有信息。

【讨论】:

  • 当您可以将 const char * 传递给 JS_CompileScript 以获取脚本对象然后在该对象上调用 JS_ExecuteScript 以创建您的对象时,我不会在硬链接代码中创建数组来自实际的 JavaScript。 API 方法通常保留用于创建无法单独在 javascript 中实现的对象。
  • 通过研究 SpiderMonkey Shell 所包含的代码,您可以学到很多关于硬编码 JavaScript 的知识。
  • 使用 API 来做一些你可以用 javascript 做的事情是不好的编码习惯。
  • 其实JSAPI 说调用JS_NewArrayObject(cx, 0, NULL) 通常会更好,将返回的对象存储在GC根中,然后用JS_SetElement填充其元素
  • 我的错。在实际程序中,我需要解析objectA 两次。一次没有定义arrayA,这会导致所有问题。在定义了 arrayA 的情况下解析 objectA 时很好。谢谢你的痛苦
猜你喜欢
  • 1970-01-01
  • 2017-02-06
  • 2011-04-03
  • 2020-03-21
  • 2012-03-24
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多