在线文档教程

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实例中也是可见的和可调用的。

规范

SpecificationStatusComment
Web Assembly JavaScript APIThe definition of 'Table' in that specification.DraftInitial draft definition.

浏览器兼容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic Support5716522No4411
get5716522No4411
grow5716522No4411
length5716522No4411
prototype5716522No4411
set5716522No4411

FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support5757(Yes)1522No?11
get5757(Yes)1522No?11
grow5757(Yes)1522No?11
length5757(Yes)1522No?11
prototype5757(Yes)1522No?11
set5757(Yes)1522No?11