WebAssembly.Table
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.
Объект WebAssembly.Table()
- это JavaScript обёртка — структура похожая на массив, представляющая таблицу функций WebAssembly. Таблица, созданная через JavaScript или в коде WebAssembly, будет доступна и может быть изменена как из JavaScript, так и из WebAssembly.
Примечание: Таблицы сейчас хранят только ссылки на функции, но это может быть расширено в будущем.
Конструктор
WebAssembly.Table()
-
Создаёт новый объект
Table
.
Экземпляры Table
Все экземпляры Table
наследуются от прототипа конструктора Table()
, следовательно изменения прототипа затронут все экземпляры Table
.
Свойства экземпляра
Table.prototype.constructor
-
Возвращает функцию которая создала этот объект. По умолчанию это конструктор
WebAssembly.Table()
. Table.prototype.length
-
Возвращает длину таблицы (количество элементов в таблице).
Instance methods
Table.prototype.get(index)
-
Возвращает указанное значение из таблицы.
Table.prototype.grow(count)
-
Увеличивает размер таблицы на указанное количество элементов.
Table.prototype.set(index, value)
-
Сохраняет указанное значение в таблицу под указанным индексом.
Примеры
Следующий пример (смотри исходный код и живую версию table2.html) создаёт новый экземпляр WebAssembly Table с 2 элементами. После этого выводит длину таблицы и содержимое первых двух элементов (полученных через Table.prototype.get()
чтобы показать что длина равняется 2 и элементы равны 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,
},
};
После этого, мы создаём экземпляр модуля wasm (table2.wasm) используя метод WebAssembly.instantiateStreaming()
. Модуль table2.wasm содержит две функции, одна возвращает 42, а вторая - 83) и сохраняет эти функции под индексами 0 и 1 в импортированную таблицу (смотри текстовую версию). Таким образом, после создания wasm-модуля, таблица имеет туже длину, но элементы таблицы стали функциями экспортированными из WebAssembly которые можно вызывать из JS.
WebAssembly.instantiateStreaming(fetch("table2.wasm"), importObject).then(
function (obj) {
console.log(tbl.length);
console.log(tbl.get(0)());
console.log(tbl.get(1)());
},
);
Заметьте что понадобилось добавить второй оператор вызова функции чтобы вызвать функцию возвращённую из талицы (т.е. get(0)()
вместо get(0)
) .
Этот пример показывает что мы создаём и работаем с таблицей из JavaScript, но экземпляр таблицы также виден и доступен внутри модуля wasm.
Спецификации
Specification |
---|
WebAssembly JavaScript Interface # tables |
Совместимость с браузерами
BCD tables only load in the browser