WebAssembly.Table

WebAssembly.Table 对象是一个 JavaScript 包装对象 - 一个类似数组的结构,表示一个 WebAssembly 表,它存储同类引用。由 JavaScript 或 WebAssembly 代码创建的表将可从 JavaScript 和 WebAssembly 中访问和修改。

注意: 表目前只能存储函数引用或主机引用,但这很可能在将来扩展。

构造函数

WebAssembly.Table()

创建一个新的 Table 对象。

实例属性

Table.prototype.length 只读

返回表的长度,即表中元素的数量。

实例方法

Table.prototype.get()

访问器函数 - 获取存储在给定索引处的元素。

Table.prototype.grow()

Table 实例的大小增加指定数量的元素。

Table.prototype.set()

将存储在给定索引处的元素设置为给定值。

示例

创建新的 WebAssembly 表实例

以下示例 (请参阅 table2.html 源代码实时版本) 创建一个新的 WebAssembly 表实例,其初始大小为 2 个元素。然后,我们打印出表的长度和两个索引的内容 (通过 Table.prototype.get() 获取),以显示长度为 2 并且两个元素都是 null

js
const tbl = new WebAssembly.Table({ initial: 2, element: "anyfunc" });
console.log(tbl.length); // "2"
console.log(tbl.get(0)); // "null"
console.log(tbl.get(1)); // "null"

然后,我们创建一个包含表的导入对象

js
const importObj = {
  js: { tbl },
};

最后,我们使用 WebAssembly.instantiateStreaming() 方法加载并实例化 Wasm 模块 (table2.wasm)。table2.wasm 模块包含两个函数 (一个返回 42,另一个返回 83),并将两者存储到导入表的元素 0 和 1 中 (请参阅 文本表示)。因此,在实例化后,表仍然具有长度 2,但元素现在包含可调用的 导出 WebAssembly 函数,我们可以从 JS 中调用这些函数。

js
WebAssembly.instantiateStreaming(fetch("table2.wasm"), importObject).then(
  (obj) => {
    console.log(tbl.length);
    console.log(tbl.get(0)());
    console.log(tbl.get(1)());
  },
);

请注意,您必须在访问器的末尾包含第二个函数调用运算符才能实际调用引用的函数并记录存储在其内部的值 (例如 get(0)() 而不是 get(0))。

此示例显示我们正在从 JavaScript 中创建和访问表,但相同的表在 Wasm 实例内部也可见且可调用。

规范

规范
WebAssembly JavaScript 接口
#

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅