语法
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 |
浏览器兼容性
加载中…