WebAssembly.Table.prototype.set()
WebAssembly.Table
オブジェクトの set()
プロトタイプメソッドは指定されたインデックスに格納されている参照を違う値に変更します。
構文
table.set(index, value);
引数
- index
- 変更する関数参照のインデックス。
- value
- 変更する参照。これは エクスポートされた WebAssembly 関数 、 wasm 関数を内在する JavaScript ラッパーである必要があります。
返値
なし。
例外
- index が
Table.prototype.length
の場合、RangeError
がスローされます。 - value がエクスポートされた WebAssembly 関数でも
null
でもない場合、TypeError
をスローします。
例
次の例では、2つ参照を持つ WebAssembly Table インスタンスを生成しています (table2.html ソースコード と 動作例 を確認してください) 。それから、長さが2で、関数参照が含まれないこと (null
を返します) を確認するために、テーブルの長さと2つのインデックス (Table.prototype.get()
を通して読み出して) のコンテンツを表示します。
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
}
};
最後に、fetchAndInstantiate()
ユーティリティ関数を使用して wasm モジュール (table2.wasm) をロードしてインスタンス化します。テーブルの長さを表示して、いまテーブルに格納された(table2.wasm モジュール (テキスト表現 を参照) はテーブルに2つの関数参照を追加し、両方とも、簡単な数値を表示します)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 インスタンス内で同じテーブルを参照して呼び出すこともできます。
仕様書
ブラウザーの互換性
BCD tables only load in the browser