此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

WebAssembly.Instance() 构造函数

基线 广泛可用

自 2017年10月 起,此特性已在主流浏览器中得到支持,可在大多数设备和浏览器版本中正常使用。

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

警告:因为实例化大模块的开销很大,当一定要使用同步实例化时,开发者才应该使用 Instance;在所有其他情况下使用异步的 WebAssembly.instantiateStreaming() 方法。

语法

js
new WebAssembly.Instance(module, importObject)

参数

module

要实例化的 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 Interface
# dom-instance-instance

浏览器兼容性

参见