WebAssembly.Table.prototype.set()
**set()
** 是 WebAssembly.Table
对象的原型方法,它将存储在给定索引处的引用变更为不同的值。
语法
js
set(index, value)
参数
index
-
要变更为不同的值的功能引用的索引。
value
-
要变更为不同的值的引用值。这必须是表元素类型的值。根据类型,它可能是 导出的 WebAssembly 函数、Wasm 函数的 JavaScript 包装器或主机引用。
返回值
无 (undefined
).
异常
- 如果
index
大于或等于Table.prototype.length
,则会抛出RangeError
。 - 如果
value
不是表的元素类型,则会抛出TypeError
。
示例
使用 Table.set
以下示例(参见 table2.html 源代码 和 在线版本)创建一个新的 WebAssembly Table 实例,初始大小为两个引用。然后我们打印出表长度和两个索引的内容(通过 Table.prototype.get()
获取),以显示长度为 2,并且索引当前不包含任何函数引用(它们当前返回 null
)。
js
const tbl = new WebAssembly.Table({ initial: 2, element: "anyfunc" });
console.log(tbl.length);
console.log(tbl.get(0));
console.log(tbl.get(1));
然后我们创建一个包含对表的引用的导入对象
js
const importObj = {
js: { tbl },
};
最后,我们使用 WebAssembly.instantiateStreaming()
加载和实例化 Wasm 模块(table2.wasm),打印表长度,并调用现在存储在表中的两个引用函数。table2.wasm
模块向表添加了两个函数引用,它们都打印出一个简单值(参见 文本表示)。
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 接口 # dom-table-set |
浏览器兼容性
BCD 表仅在浏览器中加载