WebAssembly.table.set
WebAssembly.table.set
这是一项
实验技术
在使用此产品之前,请仔细检查浏览器兼容性表。
WebAssembly.Table
对象的set()
原型方法将存储在给定索引处的引用变为不同的值。
语法
table.set(index, value
参数
_index_您想要mutate._value_的函数引用的索引要变更引用的值。这是一个导出的WebAssembly函数,一个底层的wasm函数的JavaScript包装器。
返回值
Void.
异常
- 如果
index
大于或等于Table.prototype.length
a,则抛出RangeError
。
- 如果值不是出口WebAssembly功能或者
null
,则抛出一个TypeError
。
示例
以下示例(请参阅table2.html 源代码和实时版本)将创建一个新的WebAssembly表实例,其初始大小为2个引用。然后,我们打印出两个索引(通过检索Table.prototype.get()
)的表长度和内容,以显示长度为2,并且索引当前不包含函数引用(它们当前返回null
)。
var tbl = new WebAssembly.Table{initial:2, element:"anyfunc"}
console.log(tbl.length
console.log(tbl.get(0)
console.log(tbl.get(1)
然后我们创建一个包含对表的引用的导入对象:
var importObj = {
js: {
tbl:tbl
}
};
最后,我们使用我们的fetchAndInstantiate()
效用函数加载并实例化一个wasm模块(table2.wasm),记录表长度,并调用现在存储在表中的两个引用函数(table2.wasm模块(见文本表示)添加两个函数引用表,这两个都打印出一个简单的值):
fetchAndInstantiate('table2.wasm', importObject).then(function(instance) {
console.log(tbl.length
console.log(tbl.get(0)()
console.log(tbl.get(1)()
}
注意如何在访问器的末尾包含第二个函数调用操作符,以实际调用引用的函数并记录其中存储的值(例如,get(0)()
而不是get(0)
)。
这个例子显示了我们正在使用JavaScript创建和访问表,但同样的表在wasm实例中也是可见的和可调用的。
规范
Specification | Status | Comment |
---|---|---|
Web Assembly JavaScript APIThe definition of 'set()' in that specification. | Draft | Initial draft definition. |
浏览器兼容性
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | 57 | 16 | 522 | No | 44 | 11 |
Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |