0
我嵌入SpiderMonkey並試圖使用JS_BindCallable
。但是,我有JSObject *
,我想用作newThis
,但該功能需要JSRawObject
。關於JSRawObject
的文檔似乎很少,頭文件沒有提供任何線索。什麼是JSRawObject,以及如何從JSObject *獲取它?
它似乎編譯,如果我只是通過它JSObject *
,沒有崩潰,但我不知道爲什麼,這讓我不舒服。此外,它似乎並不奏效 - 不確定是因爲這個問題還是因爲其他原因。特別是,我這樣做:
JSObject *result = JS_NewObject(cx, NULL, NULL, NULL);
//create .finish() callable
int props = JSPROP_READONLY | JSPROP_PERMANENT | JSPROP_ENUMERATE;
JS_DefineFunction(cx, result, "finish", my_native_func, 0, props);
//bind finish to always use 'this'
jsval jsvFinishFuncObj;
JS_GetProperty(cx, result, "finish", &jsvFinishFuncObj);
JSObject *finishFuncObj = JSVAL_TO_OBJECT(jsvFinishFuncObj);
JS_BindCallable(cx, finishFuncObj, result);
啊,這是有道理的,謝謝......現在,我如何從'JSFunction *'到'JSObject *'? – Claudiu
只需投射JSFunction是JSObject的一個子類:http://dxr.mozilla.org/mozilla-central/source/js/src/jsfun.h?from=JSFunction#l25 – evilpie
哎呀。我使用'JS_GetFunctionObject',似乎只是施放它。我做了一個可以工作的幫助函數,我將編輯你的測試代碼並接受答案。 – Claudiu