WebAssembly.Table
=================

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

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

Конструктор
-----------

`WebAssembly.Table()` (en-US)

Создаёт новый объект `Table`.

Экземпляры `Table`
------------------

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

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

`Table.prototype.constructor`

Возвращает функцию которая создала этот объект. По умолчанию это конструктор `WebAssembly.Table()`.

`Table.prototype.length` (en-US)

Возвращает длину таблицы (количество элементов в таблице).

### Instance methods

`Table.prototype.get(index)` (en-US)

Возвращает указанное значение из таблицы.

`Table.prototype.grow(count)` (en-US)

Увеличивает размер таблицы на указанное количество элементов.

`Table.prototype.set(index, value)` (en-US)

Сохраняет указанное значение в таблицу под указанным индексом.

Примеры
-------

Следующий пример (смотри исходный код и живую версию table2.html) создаёт новый экземпляр WebAssembly Table с 2 элементами. После этого выводит длину таблицы и содержимое первых двух элементов (полученных через `Table.prototype.get()` (en-US) чтобы показать что длина равняется 2 и элементы равны `null`.


```js
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"
```


После этого мы создаём объект импорта содержащий таблицу:


```js
var importObj = {
  js: {
    tbl: tbl,
  },
};
```


После этого, мы создаём экземпляр модуля wasm (table2.wasm) используя метод `WebAssembly.instantiateStreaming()` (en-US). Модуль table2.wasm содержит две функции, одна возвращает 42, а вторая - 83) и сохраняет эти функции под индексами 0 и 1 в импортированную таблицу (смотри текстовую версию). Таким образом, после создания wasm-модуля, таблица имеет туже длину, но элементы таблицы стали функциями экспортированными из WebAssembly которые можно вызывать из JS.


```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 with JavaScript enabled. Enable JavaScript to view data.

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

* Обзор WebAssembly
* Концепция WebAssembly
* Использование JavaScript API WebAssembly