Обезьяна-паук: почему массив JS не наследует свойства по умолчанию, такие как длина, соединение и т. Д. - PullRequest
1 голос
/ 22 марта 2012

Я на самом деле новичок как в 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.Можете ли вы сказать, что я делаю не так.Я сталкиваюсь с тем же, даже когда я создаю жало.

1 Ответ

1 голос
/ 31 марта 2012

Ваша первая очевидная проблема:

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

На этих пяти страницах есть вся информация, необходимая для взлома кода.

...