WebAssembly.Table() コンストラクター

WebAssembly.Table() コンストラクターは、大きさと要素の型を指定して新しい Table オブジェクトを生成します。

構文

new WebAssembly.Table(tableDescriptor);

引数

tableDescriptor
以下のメンバーを含むことができるオブジェクトです。
element
文字列で、テーブルに格納される値の型を表します。現時点では、 "anyfunc" (関数) の値のみを取ることができます。
initial
WebAssembly テーブルの初期の要素数です。
maximum Optional
WebAssembly テーブルが拡張する最大の要素数です。

例外

  • tableDescriptor がオブジェクトでない場合は、 TypeError が発生します。
  • maximum が設定されており、かつ initial よりも小さい場合は、 RangeError が発生します。

次の例では (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 インスタンスの中から見ることができ、呼び出すこともできます。

仕様書

ブラウザーの互換性

BCD tables only load in the browser

関連情報