WebAssembly.Table
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since â¨Ð¾ÐºÑÑбÑÑ 2017 г.â©.
ÐбÑÐµÐºÑ 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 > # tables > |