WebAssembly.Module.exports()

Baseline 已广泛支持

此功能已非常成熟,可在多种设备和浏览器版本上使用。自 2017 年 10 月以来,它已在各大浏览器中可用。

WebAssembly.Module.exports() 静态方法返回一个数组,其中包含给定 Module 的所有已声明导出项的描述。

语法

js
WebAssembly.Module.exports(module)

参数

模块

一个 WebAssembly.Module 对象。

返回值

一个包含代表给定模块导出函数的对象的数组。

异常

如果 module 不是 WebAssembly.Module 对象实例,则会抛出 TypeError

示例

使用导出项

以下示例(请参阅 GitHub 上的 index-compile.html 演示,以及 在线查看)使用 WebAssembly.compileStreaming() 方法编译加载的 simple.wasm 字节码,然后使用 postMessage() 将其发送到 worker

js
const worker = new Worker("wasm_worker.js");

WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) =>
  worker.postMessage(mod),
);

在 worker 中(请参阅 wasm_worker.js),我们为模块定义了一个导入对象,然后设置一个事件处理程序来接收主线程的模块。收到模块后,我们使用 WebAssembly.Instantiate() 方法从中创建一个实例,调用其中的一个导出函数,然后展示如何使用 WebAssembly.Module.exports 返回有关模块可用导出项的信息。

js
const importObject = {
  my_namespace: {
    imported_func(arg) {
      console.log(arg);
    },
  },
};

onmessage = (e) => {
  console.log("module received from main thread");
  const mod = e.data;

  WebAssembly.instantiate(mod, importObject).then((instance) => {
    instance.exports.exported_func();
  });

  const exports = WebAssembly.Module.exports(mod);
  console.log(exports[0]);
};

exports[0] 的输出如下所示

json
{ "name": "exported_func", "kind": "function" }

规范

规范
WebAssembly JavaScript 接口
# dom-module-exports

浏览器兼容性

另见