WebAssembly.Table() 构造函数
WebAssembly.Table() 构造函数创建一个新的 Table 对象,该对象具有指定的大小和元素类型,并使用提供的值进行填充。
语法
new WebAssembly.Table(tableDescriptor)
new WebAssembly.Table(tableDescriptor, value)
参数
tableDescriptor-
一个可以包含以下成员的对象
element-
一个字符串,表示要在表中存储的值的类型。它可以是
"anyfunc"(函数)或"externref"(主机引用)。 initial-
WebAssembly 表的初始元素数量。
maximum可选-
WebAssembly 表被允许增长到的最大元素数量。
value可选-
用于填充新分配空间的元素。
异常
- 如果
tableDescriptor不是对象,则会抛出TypeError。 - 如果指定了
maximum且小于initial,则会抛出RangeError。 - 如果
element不是 引用类型之一,则会抛出TypeError。 - 如果
value的类型不是element类型,则会抛出TypeError。
示例
创建一个新的 WebAssembly 表实例
下面的示例创建了一个具有 2 个初始元素的 WebAssembly.Table 实例。WebAssembly.Table 的内容使用 WebAssembly 模块进行填充,并可从 JavaScript 访问。查看 实时示例时,请打开开发者控制台以显示下方代码片段中的控制台日志消息。
此示例使用以下参考文件
table2.html:一个包含创建和操作WebAssembly.Table的 JavaScript 的 HTML 页面(源代码)table2.wat:一个 WebAssembly 文本格式模块,该模块被转换为二进制格式并由table2.html中的 JavaScript 代码导入(源代码)
注意: 提供了一个预编译的 WebAssembly 二进制文件 table2.wasm 以供下载。
在 table2.html 中,我们创建了一个 WebAssembly.Table
const tbl = new WebAssembly.Table({
initial: 2,
element: "anyfunc",
});
我们可以使用 Table.prototype.get() 来检索索引内容
console.log(tbl.length); // a table with 2 elements
console.log(tbl.get(0)); // content for index 0 is null
console.log(tbl.get(1)); // content for index 1 is null
接下来,我们创建一个包含 WebAssembly.Table 的导入对象
const importObject = {
js: { tbl },
};
接下来,我们加载并实例化一个 WebAssembly 模块。table2.wasm 模块定义了一个包含两个函数的表。第一个函数返回 42,第二个函数返回 83
(module
(import "js" "tbl" (table 2 funcref))
(func $f42 (result i32) i32.const 42)
(func $f83 (result i32) i32.const 83)
(elem (i32.const 0) $f42 $f83)
)
我们使用 WebAssembly.instantiateStreaming() 方法实例化 table2.wasm
const instantiating = WebAssembly.instantiateStreaming(
fetch("table2.wasm"),
importObject,
);
实例化 table2.wasm 后,tbl 会更新为以下内容:
- 表的长度仍为 2
- 索引 0 的内容现在是一个返回 42 的函数
- 索引 1 的内容现在是一个返回 83 的函数
表的索引 0 和 1 处的项现在是可调用的 导出的 WebAssembly 函数。要调用它们,请注意我们必须在 get() 调用后添加函数调用运算符 ()
instantiating.then((obj) => {
console.log(tbl.length); // 2
console.log(tbl.get(0)()); // 42
console.log(tbl.get(1)()); // 83
});
虽然我们正在从 JavaScript 创建和访问 WebAssembly.Table,但同一个 Table 在 WebAssembly 实例内部也是可见和可调用的。
创建一个带值的新的 WebAssembly 表实例
下面的示例创建一个新的 WebAssembly 表实例,包含 4 个元素,并用同一个对象填充
const myObject = { hello: "world" };
const table = new WebAssembly.Table(
{
element: "externref",
initial: 4,
maximum: 4,
},
myObject,
);
console.log(myObject === table.get(2)); // true
规范
| 规范 |
|---|
| WebAssembly JavaScript 接口 # dom-table-table |
浏览器兼容性
加载中…