WebAssembly.table
WebAssembly.table
这是一项
实验技术
在使用此产品之前,请仔细检查浏览器兼容性表。
WebAssembly.Table()
构造函数创建一个新Table
的给定尺寸和元素类型的对象。
这是一个JavaScript包装对象 - 代表一个WebAssembly表的数组结构表,存储函数引用。由JavaScript或WebAssembly代码创建的表格将可从JavaScript和WebAssembly访问和修改。
注意
:表格当前只能存储函数引用,但将来可能会扩展。
语法
var myTable = new WebAssembly.Table(tableDescriptor
参数
_tableDescriptor_可包含以下成员的对象:_element_表示要存储在表中的值类型的字符串。目前这只能有"anyfunc"
(函数)的值。initial_ WebAssembly Table的元素的初始数目._maximum Optional_允许WebAssembly表增长到的元素的最大数量。
异常
- 如果
tableDescriptor
不是类型对象,则抛出TypeError
。
- 如果
maximum
被指定并小于initial
,则抛出RangeError
。
Table实例
所有Table
实例都继承于Table()
构造函数的原型对象 - 可以通过修改它来影响所有Table
实例。
实例属性
Table.prototype.constructor
返回创建此对象实例的函数。默认情况下这是WebAssembly.Table()
构造函数。Table.prototype.length
返回表的长度,即元素的数量。
实例方法
Table.prototype.get()
访问器函数 - 获取存储在给定索引处的元素。Table.prototype.grow()
将表实例的大小增加指定数量的元素。Table.prototype.set()
将存储在给定索引处的元素设置为给定值。
示例
以下示例(请参阅table2.html 源代码和实时版本)将创建一个初始大小为2个元素的新WebAssembly表实例。然后我们打印出两个索引的表长度和内容(通过检索Table.prototype.get()
来显示长度是两个元素,两个元素都是null
。
var 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"
然后我们创建一个包含表的导入对象:
var importObj = {
js: {
tbl:tbl
}
};
最后,我们使用我们的fetchAndInstantiate()
效用函数加载和实例化一个wasm模块(table2.wasm)。table2.wasm模块包含两个函数(一个返回42,另一个返回83),并将其存储到导入表的元素0和1中(请参阅文本表示形式)。所以在实例化之后,表仍然有长度2,但是现在元素包含可调用的导出的WebAssembly函数,我们可以从JS调用。
fetchAndInstantiate('table2.wasm', importObject).then(function(instance) {
console.log(tbl.length // "2"
console.log(tbl.get(0)() // "42"
console.log(tbl.get(1)() // "83"
}
注意如何在访问器的末尾包含第二个函数调用操作符,以实际调用引用的函数并记录其中存储的值(例如,get(0)()
而不是get(0)
)。
这个例子显示了我们正在使用JavaScript创建和访问表,但同样的表在wasm实例中也是可见的和可调用的。
规范
Specification | Status | Comment |
---|---|---|
Web Assembly JavaScript APIThe definition of 'Table' in that specification. | Draft | Initial draft definition. |
浏览器兼容性
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | 57 | 16 | 522 | No | 44 | 11 |
get | 57 | 16 | 522 | No | 44 | 11 |
grow | 57 | 16 | 522 | No | 44 | 11 |
length | 57 | 16 | 522 | No | 44 | 11 |
prototype | 57 | 16 | 522 | No | 44 | 11 |
set | 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 |
get | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
grow | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
length | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
prototype | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |
set | 57 | 57 | (Yes)1 | 522 | No | ? | 11 |