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.

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

Specification
WebAssembly JavaScript Interface
Определение 'Table' в этой спецификации.

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

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidFirefox для AndroidOpera для AndroidSafari on iOSSamsung InternetNode.js
TableChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Полная поддержка 43Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
Table() constructorChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Полная поддержка 43Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
getChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Полная поддержка 43Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
growChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Полная поддержка 43Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
lengthChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Полная поддержка 43Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0
setChrome Полная поддержка 57Edge Полная поддержка 16Firefox Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
IE Нет поддержки НетOpera Полная поддержка 44Safari Полная поддержка 11WebView Android Полная поддержка 57Chrome Android Полная поддержка 57Firefox Android Полная поддержка 52
Замечания
Полная поддержка 52
Замечания
Замечания Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android Полная поддержка 43Safari iOS Полная поддержка 11Samsung Internet Android Полная поддержка 7.0nodejs Полная поддержка 8.0.0

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки
Смотрите замечания реализации.
Смотрите замечания реализации.

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