WebAssembly.Table

Объект 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.

Спецификации

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также