WebAssembly.Table.prototype.set()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since October 2017.
set()
は WebAssembly.Table
オブジェクトのプロトタイプメソッドで、指定された位置に格納されている参照を別な値に変更します。
構文
set(index, value);
引数
- index
-
変更する関数参照の位置。
- value
-
変更する参照。これはエクスポートされた WebAssembly 関数、 wasm 関数を内在する JavaScript ラッパーである必要があります。
返値
なし。
例外
- index が
Table.prototype.length
以上の場合、RangeError
が発生します。 - value がエクスポートされた WebAssembly 関数でも
null
でもない場合、TypeError
が発生します。
例
Table.set の使用
次の例 (table2.html のソースコードと動作例を確認してください) では、初期サイズが参照 2 つである WebAssembly Table インスタンスを生成しています。そして、テーブルの長さと 2 つの位置の内容 (Table.prototype.get()
で取得) を出力して、長さが 2 であること、それぞれの位置には現在、関数の参照が含まれていないこと (現在は null
を返すこと) を示しています。
var tbl = new WebAssembly.Table({ initial: 2, element: "anyfunc" });
console.log(tbl.length);
console.log(tbl.get(0));
console.log(tbl.get(1));
次に、テーブルの参照を含むインポートオブジェクトを作成します。
var importObj = {
js: {
tbl: tbl,
},
};
最後に、 wasm モジュール (table2.wasm) を WebAssembly.instantiateStreaming()
を使用して読み込みインスタンス化します。テーブルの長さを記録し、テーブルに格納された 2 つの関数参照を呼び出します (table2.wasm モジュール (テキスト表現) がテーブルに 2 つの関数の参照を追加し、どちらも単純な表示を表示します)。
WebAssembly.instantiateStreaming(fetch("table2.wasm"), importObject).then(
function (obj) {
console.log(tbl.length);
console.log(tbl.get(0)());
console.log(tbl.get(1)());
},
);
内部の値を表示するためには、参照された関数のアクセサーの呼び出しの後に、 2 つ目の関数呼び出しを含める必要があることに注意して下さい (get(0)
ではなく get(0)()
)。
この例では、JavaScript からテーブルを作成してアクセスしていますが、wasm インスタンス内で同じテーブルを参照して呼び出すこともできます。
仕様書
Specification |
---|
WebAssembly JavaScript Interface # dom-table-set |
ブラウザーの互換性
BCD tables only load in the browser