--- title: WebAssembly.Table slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table ---
{{JSRef}}

Объект WebAssembly.Table() - это JavaScript обертка — структура похожая на массив, представляющая таблицу функций WebAssembly. Таблица, созданная через JavaScript или в коде WebAssembly, будет доступна и может быть изменена как из JavaScript, так и из WebAssembly.

Обратите внимание: Таблицы сейчас хранят только ссылки на функции, но это может быть расширено в будущем.

Конструктор

WebAssembly.Table()
Создает новый объект Table.

Экземпляры Table

Все экземпляры Table наследуются от прототипа конструктора Table(), следовательно изменения прототипа затронут все экземпляры Table.

Свойства экземпляра

Table.prototype.constructor
Возвращает функцию которая создала этот объект. По умолчанию это конструктор {{jsxref("WebAssembly.Table()")}}.
{{jsxref("WebAssembly/Table/length","Table.prototype.length")}}
Возвращает длину таблицы (количество элементов в таблице).

Instance methods

{{jsxref("WebAssembly/Table/get","Table.prototype.get(index)")}}
Возвращает указанное значение из таблицы.
{{jsxref("WebAssembly/Table/grow","Table.prototype.grow(count)")}}
Увеличивает размер таблицы на указанное количество элементов.
{{jsxref("WebAssembly/Table/set","Table.prototype.set(index, value)")}}
Сохраняет указанное значение в таблицу под указанным индексом.

Примеры

Следующий пример (смотри исходный код и живую версию 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")}}

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