--- title: WebAssembly.Table slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table ---
Объект WebAssembly.Table()
- это JavaScript обёртка — структура похожая на массив, представляющая таблицу функций WebAssembly. Таблица, созданная через JavaScript или в коде WebAssembly, будет доступна и может быть изменена как из JavaScript, так и из WebAssembly.
Обратите внимание: Таблицы сейчас хранят только ссылки на функции, но это может быть расширено в будущем.
WebAssembly.Table()
Table
.Table
Все экземпляры Table
наследуются от прототипа конструктора Table()
, следовательно изменения прототипа затронут все экземпляры Table
.
Table.prototype.constructor
Следующий пример (смотри исходный код и живую версию table2.html) создаёт новый экземпляр WebAssembly Table с 2 элементами. После этого выводит длину таблицы и содержимое первых двух элементов (полученных через {{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} чтобы показать что длина равняется 2 и элементы равны {{jsxref("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) используя метод {{jsxref("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 |
---|
{{SpecName('WebAssembly JS', '#tables', 'Table')}} |
{{Compat("javascript.builtins.WebAssembly.Table")}}