diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:42:52 -0500 |
commit | 074785cea106179cb3305637055ab0a009ca74f2 (patch) | |
tree | e6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/ru/web/javascript/reference/global_objects/webassembly/table | |
parent | da78a9e329e272dedb2400b79a3bdeebff387d47 (diff) | |
download | translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2 translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip |
initial commit
Diffstat (limited to 'files/ru/web/javascript/reference/global_objects/webassembly/table')
-rw-r--r-- | files/ru/web/javascript/reference/global_objects/webassembly/table/index.html | 104 |
1 files changed, 104 insertions, 0 deletions
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 +--- +<div>{{JSRef}}</div> + +<p>Объект <code><strong>WebAssembly.Table()</strong></code> - это JavaScript обертка — структура похожая на массив, представляюшая таблицу функций WebAssembly. Таблица, созданная через JavaScript или в коде WebAssembly, будет доступна и может быть изменена как из JavaScript, так и из WebAssembly.</p> + +<div class="note"> +<p><strong>Обратите внимание</strong>: Таблицы сейчас хранят только ссылки на функции, но это может быть расширено в будущем.</p> +</div> + +<h2 id="Конструктор">Конструктор</h2> + +<dl> + <dt><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/Table">WebAssembly.Table()</a></code></dt> + <dd>Создает новый объект <code>Table</code>.</dd> +</dl> + +<h2 id="Экземпляры_Table">Экземпляры <code>Table</code></h2> + +<p>Все экземпляры <code>Table</code> наследуются от <a href="/ru-RU/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/prototype">прототипа конструктора</a> <code>Table()</code>, следовательно изменения прототипа затронут все экземпляры <code>Table</code>.</p> + +<h3 id="Свойства_экземпляра">Свойства экземпляра</h3> + +<dl> + <dt><code>Table.prototype.constructor</code></dt> + <dd>Возвращает функцию которая создала этот объект. По умолчанию это конструктор {{jsxref("WebAssembly.Table()")}}.</dd> + <dt>{{jsxref("WebAssembly/Table/length","Table.prototype.length")}}</dt> + <dd>Возвращает длину таблицы (количество елементов в таблице).</dd> +</dl> + +<h3 id="Instance_methods">Instance methods</h3> + +<dl> + <dt>{{jsxref("WebAssembly/Table/get","Table.prototype.get(index)")}}</dt> + <dd>Возвращает указанное значение из таблицы.</dd> + <dt>{{jsxref("WebAssembly/Table/grow","Table.prototype.grow(count)")}}</dt> + <dd>Увеличивает размер таблицы на указанное количество элементов.</dd> + <dt>{{jsxref("WebAssembly/Table/set","Table.prototype.set(index, value)")}}</dt> + <dd>Сохраняет указанное значение в таблицу под указанным индексом.</dd> +</dl> + +<h2 id="Примеры">Примеры</h2> + +<p>Следующий пример (смотри <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/table2.html">исходный код</a> и <a href="https://mdn.github.io/webassembly-examples/js-api-examples/table2.html">живую версию</a> table2.html) создает новый экземпляр WebAssembly Table с 2 элементами. После этого выводит длину таблицы и содержимое первых двух елементов (полученных через {{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} чтобы показать что длина равняется 2 и елементы равны {{jsxref("null")}}.</p> + +<pre class="brush: 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"</pre> + +<p>После этого мы создаем обьект импорта содержащий таблицу:</p> + +<pre class="brush: js">var importObj = { + js: { + tbl: tbl + } +};</pre> + +<p>После этого, мы создаем экземпляр модуля wasm (table2.wasm) используя метод {{jsxref("WebAssembly.instantiateStreaming()")}}. Модуль table2.wasm содержит две функции, одна возвращает 42, а вторая - 83) и сохраняет эти функции под индексами 0 и 1 в импортированную таблицу (смотри <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/table2.wat">текстовую версию</a>). Таким образом, после создания wasm-модуля, таблица имеет туже длину, но елементы таблицы стали <a href="/ru-RU/docs/WebAssembly/Exported_functions">функциями экспортированными из WebAssembly</a> которые можно вызывать из JS.</p> + +<pre class="brush: js">WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject) +.then(function(obj) { + console.log(tbl.length); + console.log(tbl.get(0)()); + console.log(tbl.get(1)()); +});</pre> + +<p>Заметьте что понадобилось добавить второй оператор вызова функции чтобы вызвать функцию возвращенную из талицы (т.е. <code>get(0)()</code> вместо <code>get(0)</code>) .</p> + +<p>Этот пример показывает что мы создаем и работаем с таблицей из JavaScript, но экземпляр таблицы также виден и доступен внутри модуля wasm.</p> + +<h2 id="Спецификации">Спецификации</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Specification</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('WebAssembly JS', '#tables', 'Table')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2> + +<div> + + +<p>{{Compat("javascript.builtins.WebAssembly.Table")}}</p> +</div> + +<h2 id="Смотрите_также">Смотрите также</h2> + +<ul> + <li>Обзор <a href="/ru-RU/docs/WebAssembly">WebAssembly</a></li> + <li><a href="/ru-RU/docs/WebAssembly/Concepts">Концепция WebAssembly</a></li> + <li><a href="/ru-RU/docs/WebAssembly/Using_the_JavaScript_API">Использование JavaScript API WebAssembly</a></li> +</ul> |