WebAssembly.Table.prototype.set()

Baseline 已廣泛支援

此功能已非常成熟,可在多種裝置和瀏覽器版本上使用。自 2017 年 10 月以來,它已在各大瀏覽器中可用。

set() 例項方法用於將 WebAssembly.Table 物件中儲存的引用更改為另一個值。

語法

js
set(index, value)

引數

index

要更改的函式引用的索引。

value

要將引用更改為的值。它必須是表的元素型別的值。根據型別,它可以是匯出的 WebAssembly 函式、底層 Wasm 函式的 JavaScript 包裝器或主機引用。

返回值

無(undefined)。

異常

示例

使用 Table.set

下面的示例(請參閱 table2.html 的原始碼即時版本)建立了一個新的 WebAssembly Table 例項,其初始大小為兩個引用。然後,我們打印表的長度以及兩個索引的內容(透過 Table.prototype.get() 檢索),以顯示長度為 2,並且索引當前不包含任何函式引用(它們當前返回 null)。

js
const tbl = new WebAssembly.Table({ initial: 2, element: "anyfunc" });
console.log(tbl.length);
console.log(tbl.get(0));
console.log(tbl.get(1));

然後,我們建立一個包含對錶的引用的匯入物件

js
const importObj = {
  js: { tbl },
};

最後,我們使用 WebAssembly.instantiateStreaming() 載入並例項化一個 Wasm 模組 (table2.wasm),打印表長度,並呼叫現在儲存在表中的兩個引用函式。table2.wasm 模組將兩個函式引用新增到表中,這兩個函式都會列印一個簡單值(請參閱文字表示)。

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 介面
# dom-table-set

瀏覽器相容性

另見