WebAssembly.Table() コンストラクター
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.
WebAssembly.Table()
コンストラクターは、大きさと要素の型を指定して新しい Table
オブジェクトを生成します。
構文
new WebAssembly.Table(tableDescriptor);
引数
- tableDescriptor
-
以下のメンバーを含むことができるオブジェクトです。
- element
-
文字列で、テーブルに格納される値の型を表します。現時点では、
"anyfunc"
(関数) の値のみを取ることができます。 - initial
-
WebAssembly テーブルの初期の要素数です。
- maximum 省略可
-
WebAssembly テーブルが拡張することができる最大の要素数です。
例外
tableDescriptor
がオブジェクトでない場合は、TypeError
が発生します。maximum
が設定されており、かつinitial
よりも小さい場合は、RangeError
が発生します。
例
新しい WebAssembly Table インスタンスの生成
次の例では (table2.html のソースコードと実行例はこちら) 新しく WebAssembly テーブルのインスタンスを、初期の大きさを 2 要素して生成します。それからテーブルの長さと 2 つの要素の中身を (Table.prototype.get()
で取得して) 表示し、長さは 2 で 2 つの要素は共に null
となります。
var tbl = new WebAssembly.Table({ initial: 2, element: "anyfunc" });
console.log(tbl.length); // "2"
console.log(tbl.get(0)); // "null"
console.log(tbl.get(1)); // "null"
それからテーブルを含むインポートオブジェクトを作成します。
var importObj = {
js: {
tbl: tbl,
},
};
最終的に、 wasm モジュール (table2.wasm) を WebAssembly.instantiateStreaming()
メソッドを使用して読み込みインスタンス化します。 table2.wasm モジュールには 2 つの関数 (1 つは 42 を返し、もう 1 つは 83 を返す) が入っており、それぞれをインポートされたテーブルの要素 0 と 1 に格納します。 (テキスト表現をご覧ください)。インスタンス化した後で、テーブルは長さは 2 のままですが、要素には呼び出し可能なエクスポートされた WebAssembly 関数が入り、 JS から呼び出せるようになりました。
WebAssembly.instantiateStreaming(fetch("table2.wasm"), importObject).then(
function (obj) {
console.log(tbl.length);
console.log(tbl.get(0)());
console.log(tbl.get(1)());
},
);
なお、関数呼び出し演算子がアクセサーの後に二重についており (例えば get(0)()
を get(0)
の代わりに使用)、実際に参照している関数を呼び出して、その中に格納された値をログ出力しています。
この例は JavaScript からテーブルを生成してアクセスする方法を示していますが、同じテーブルを wasm インスタンスの中から見ることができ、呼び出すこともできます。
仕様書
Specification |
---|
WebAssembly JavaScript Interface # dom-table-table |
ブラウザーの互換性
BCD tables only load in the browser