WebAssembly.Instance

Baseline 已广泛支持

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

WebAssembly.Instance 对象是 WebAssembly.Module 的一个有状态的可执行实例。Instance 对象包含所有 导出的 WebAssembly 函数,这些函数允许从 JavaScript 调用 WebAssembly 代码。

构造函数

WebAssembly.Instance()

创建一个新的 Instance 对象。

实例属性

exports

返回一个对象,该对象包含 WebAssembly 模块实例导出的所有函数作为其成员,以便 JavaScript 可以访问和使用它们。只读。

示例

同步实例化 WebAssembly 模块

可以调用 WebAssembly.Instance() 构造函数来同步实例化给定的 WebAssembly.Module 对象,例如:

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

fetch("simple.wasm")
  .then((response) => response.arrayBuffer())
  .then((bytes) => {
    const mod = new WebAssembly.Module(bytes);
    const instance = new WebAssembly.Instance(mod, importObject);
    instance.exports.exported_func();
  });

获取 Instance 的首选方法是异步的,例如使用 WebAssembly.instantiateStreaming() 函数,如下所示:

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

WebAssembly.instantiateStreaming(fetch("simple.wasm"), importObject).then(
  (obj) => obj.instance.exports.exported_func(),
);

这还演示了如何使用 exports 属性来访问导出的函数。

规范

规范
WebAssembly JavaScript 接口
# instances

浏览器兼容性

另见