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