WebAssembly.Instance() 构造函数

Baseline 已广泛支持

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

WebAssembly.Instance() 构造函数创建一个新的 Instance 对象,它是一个 WebAssembly.Module 的有状态、可执行的实例。

警告: 由于实例化大型模块可能开销很大,开发人员应仅在绝对需要同步实例化时才使用 Instance() 构造函数;在所有其他情况下,应使用异步的 WebAssembly.instantiateStreaming() 方法。

语法

js
new WebAssembly.Instance(module, importObject)

参数

模块

要实例化的 WebAssembly.Module 对象。

importObject 可选

一个包含要导入到新创建的 Instance 中的值的对象,例如函数或 WebAssembly.Memory 对象。对于 module 的每个声明的导入,都必须有一个匹配的属性,否则将抛出 WebAssembly.LinkError

异常

示例

同步实例化 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(),
);

规范

规范
WebAssembly JavaScript 接口
# dom-instance-instance

浏览器兼容性

另见