JavaScript — что делает JS_WrapObject?

Я работаю над созданием некоторых дополнительных привязок для Cocos2D-JavaScript, и мне нужно узнать, как все это работает. Что делает SpiderMonkey’s JS_WrapObject() определяется в jsapi.h делать? Я не могу найти хорошие документы на него, и он не появляется в JSAPI Ссылка. Например, он используется следующим образом:

JSObject* JSB_NewGlobalObject(JSContext* cx, bool empty)
{
JSObject* glob = JS_NewGlobalObject(cx, &global_class, NULL);
...
JS_WrapObject(cx, &glob);
return glob;
}

2

Решение

Этот вопрос довольно старый, но, возможно, ответ кому-нибудь поможет.

Эта функция создает упаковку для нескольких частей для данного объекта JS. Учитывая, что объект JS, созданный для одного отделения, не может использоваться совместно с другим отделом напрямую, существует концепция оболочки, которая должна быть подготовлена ​​для совместного использования одного и того же экземпляра объекта JS между различными отделами.

Отсек можно рассматривать как контейнер, который имеет свой собственный GC и разделяет ряд связанных объектов. Например, каждый глобальный объект в SpiderMonkey имеет свое собственное отделение.

Допустим, у вас есть два независимых глобальных объекта в контексте JS. Вы можете оценить один сценарий в контексте первого глобального объекта, затем вы можете использовать значение результата в качестве аргумента для второго сценария, который будет оцениваться с использованием второго глобального объекта. Но для того, чтобы сделать это, вы должны обернуть его с помощью обертки с поперечным отсеком.

Важным моментом здесь является тот факт, что JS_WrapObject готовит оболочку для активного отделения, поэтому может потребоваться сделать ожидаемое отделение активным с использованием, например, класса JSAutoCompartment.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]