このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
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 2017年10月.
WebAssembly.Table() コンストラクターは、大きさと要素の型を指定して新しいTable オブジェクトを生成します。
In this article
構文
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> |