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 オブジェクトを生成します。

構文

js
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 となります。

js
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"

それからテーブルを含むインポートオブジェクトを作成します。

js
var importObj = {
  js: {
    tbl: tbl,
  },
};

最終的に、 wasm モジュール (table2.wasm) を WebAssembly.instantiateStreaming() メソッドを使用して読み込みインスタンス化します。 table2.wasm モジュールには 2 つの関数 (1 つは 42 を返し、もう 1 つは 83 を返す) が入っており、それぞれをインポートされたテーブルの要素 0 と 1 に格納します。 (テキスト表現をご覧ください)。インスタンス化した後で、テーブルは長さは 2 のままですが、要素には呼び出し可能なエクスポートされた WebAssembly 関数が入り、 JS から呼び出せるようになりました。

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

関連情報