WebAssembly.Table.prototype.set()

set()WebAssembly.Table オブジェクトのプロトタイプメソッドで、指定された位置に格納されている参照を別な値に変更します。

構文

set(index, value)

引数

index

変更する関数参照の位置。

value

変更する参照。これはエクスポートされた WebAssembly 関数、 wasm 関数を内在する JavaScript ラッパーである必要があります。

返値

なし。

例外

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 モジュール ([テキスト表現]](https://github.com/mdn/webassembly-examples/blob/master/text-format-examples/table2.was)) がテーブルに 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

関連情報