首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WebAssembly.table

这是一项 实验技术

在使用此产品之前,请仔细检查浏览器兼容性表。

WebAssembly.Table()构造函数创建一个新Table的给定尺寸和元素类型的对象。

这是一个JavaScript包装对象 - 代表一个WebAssembly表的数组结构表,存储函数引用。由JavaScript或WebAssembly代码创建的表格将可从JavaScript和WebAssembly访问和修改。

注意:表格当前只能存储函数引用,但将来可能会扩展。

语法

代码语言:javascript
复制
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

代码语言:javascript
复制
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"

然后我们创建一个包含表的导入对象:

代码语言:javascript
复制
var importObj = {
  js: {
    tbl:tbl
  }
};

最后,我们使用我们的fetchAndInstantiate()效用函数加载和实例化一个wasm模块(table2.wasm)。table2.wasm模块包含两个函数(一个返回42,另一个返回83),并将其存储到导入表的元素0和1中(请参阅文本表示形式)。所以在实例化之后,表仍然有长度2,但是现在元素包含可调用的导出的WebAssembly函数,我们可以从JS调用。

代码语言:javascript
复制
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

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com