WebAssembly.Table.prototype.set()
**set()** 是 WebAssembly.Table 物件的原型方法,它將儲存在給定索引處的引用變更為不同的值。
語法
js
set(index, value)
引數
index-
要變更為不同的值的功能引用的索引。
value-
要變更為不同的值的引用值。這必須是表元素型別的值。根據型別,它可能是 匯出的 WebAssembly 函式、Wasm 函式的 JavaScript 包裝器或主機引用。
返回值
無 (undefined).
異常
- 如果
index大於或等於Table.prototype.length,則會丟擲RangeError。 - 如果
value不是表的元素型別,則會丟擲TypeError。
示例
使用 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 |
瀏覽器相容性
BCD 表僅在瀏覽器中載入