From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../global_objects/webassembly/table/index.html | 104 +++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 files/ru/web/javascript/reference/global_objects/webassembly/table/index.html (limited to 'files/ru/web/javascript/reference/global_objects/webassembly/table') diff --git a/files/ru/web/javascript/reference/global_objects/webassembly/table/index.html b/files/ru/web/javascript/reference/global_objects/webassembly/table/index.html new file mode 100644 index 0000000000..c453aeaf46 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/webassembly/table/index.html @@ -0,0 +1,104 @@ +--- +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")}}

+
+ +

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

+ + -- cgit v1.2.3-54-g00ecf