Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

绑定模块

Github代码

本节介绍如何绑定模块

例子

首先需要创建模块:

JSModuleDef* module_def = JS_NewCModule(ctx, "MyModule", ModuleInitFn);

JS_NewCModule的签名如下:

JSModuleDef *JS_NewCModule(JSContext *ctx, const char *name_str, JSModuleInitFunc *func)

传入模块的名称,以及一个JSModuleInitFunc

JSModuleInitFunc是模块在初始化的时候调用的回调函数。一般在其中将属性绑定到模块上:

int ModuleInitFn(JSContext* ctx, JSModuleDef* m) {
    // set JSValue to module
    JS_SetModuleExport(ctx, m, "Add", JS_NewCFunction(ctx, AddFnBinding, "Add", 2))
    JS_SetModuleExport(ctx, m, "Person", gClassConstructor)
    // 0 - success
    // < 0 - failed
    return 0;
}

通过JS_SetModuleExportJSValue绑定在模块定义m中(也可以使用函数JS_SetModuleExportList)。

最后,我们需要指定哪些属性是需要导出的:

JS_AddModuleExport(ctx, module_def, "Add");
JS_AddModuleExport(ctx, module_def, "Person");

使用JS_AddModuleExport可以指定导出模块中的哪些属性(也可以使用JS_AddModuleExportList)。