WebAssembly.Table

WebAssembly.Table 物件是一個 JavaScript 包裝物件 - 一個類似陣列的結構,表示一個 WebAssembly 表,它儲存同類引用。由 JavaScript 或 WebAssembly 程式碼建立的表將可從 JavaScript 和 WebAssembly 中訪問和修改。

注意: 表目前只能儲存函式引用或主機引用,但這很可能在將來擴充套件。

建構函式

WebAssembly.Table()

建立一個新的 Table 物件。

例項屬性

Table.prototype.length 只讀

返回表的長度,即表中元素的數量。

例項方法

Table.prototype.get()

訪問器函式 - 獲取儲存在給定索引處的元素。

Table.prototype.grow()

Table 例項的大小增加指定數量的元素。

Table.prototype.set()

將儲存在給定索引處的元素設定為給定值。

示例

建立新的 WebAssembly 表例項

以下示例 (請參閱 table2.html 原始碼即時版本) 建立一個新的 WebAssembly 表例項,其初始大小為 2 個元素。然後,我們打印出表的長度和兩個索引的內容 (透過 Table.prototype.get() 獲取),以顯示長度為 2 並且兩個元素都是 null

js
const 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
const importObj = {
  js: { tbl },
};

最後,我們使用 WebAssembly.instantiateStreaming() 方法載入並例項化 Wasm 模組 (table2.wasm)。table2.wasm 模組包含兩個函式 (一個返回 42,另一個返回 83),並將兩者儲存到匯入表的元素 0 和 1 中 (請參閱 文字表示)。因此,在例項化後,表仍然具有長度 2,但元素現在包含可呼叫的 匯出 WebAssembly 函式,我們可以從 JS 中呼叫這些函式。

js
WebAssembly.instantiateStreaming(fetch("table2.wasm"), importObject).then(
  (obj) => {
    console.log(tbl.length);
    console.log(tbl.get(0)());
    console.log(tbl.get(1)());
  },
);

請注意,您必須在訪問器的末尾包含第二個函式呼叫運算子才能實際呼叫引用的函式並記錄儲存在其內部的值 (例如 get(0)() 而不是 get(0))。

此示例顯示我們正在從 JavaScript 中建立和訪問表,但相同的表在 Wasm 例項內部也可見且可呼叫。

規範

規範
WebAssembly JavaScript 介面
#

瀏覽器相容性

BCD 表僅在瀏覽器中載入

另請參閱