WebAssembly.Module.exports()

WebAssembly.Module.exports() 関数は、指定された Module のエクスポート宣言の定義の配列を返します。

構文

js
WebAssembly.Module.exports(module);

引数

module

WebAssembly.Module オブジェクトです。

返値

指定したモジュールのエクスポートされた関数を表現するオブジェクトの配列です。

例外

モジュールが WebAssembly.Module オブジェクトのインスタンスではない場合、TypeError が発生します。

exports の使用

次の例 (Github のデモ index-compile.html と、動作例も参照) では、WebAssembly.compileStreaming() 関数を使用して読み込んだ simple.wasm のバイトコードをコンパイルして、ワーカーpostMessage() を使用して送信しています。

js
var worker = new Worker("wasm_worker.js");

WebAssembly.compileStreaming(fetch("simple.wasm")).then((mod) =>
  worker.postMessage(mod),
);

ワーカー (wasm_worker.js を参照) 内で、モジュールで使用するためにインポートオブジェクトを定義して、そのあとにメインスレッドからモジュールを受け取るためのイベントハンドラーをセットアップします。モジュールを受け取ったとき、WebAssembly.Instantiate() メソッドを使用してインスタンスを生成し、その内部でエクスポートされた関数を実行します。そのあとに WebAssembly.Module.exports を使用してモジュール上の利用可能なエクスポートの情報を返す方法を示します。

js
var importObject = {
  imports: {
    imported_func: function (arg) {
      console.log(arg);
    },
  },
};

onmessage = function (e) {
  console.log("module received from main thread");
  var mod = e.data;

  WebAssembly.instantiate(mod, importObject).then(function (instance) {
    instance.exports.exported_func();
  });

  var exports = WebAssembly.Module.exports(mod);
  console.log(exports[0]);
};

exports[0] の出力はこのようになります。

js
{ name: "exported_func", kind: "function" }

仕様書

Specification
WebAssembly JavaScript Interface
# dom-module-exports

ブラウザーの互換性

BCD tables only load in the browser

関連情報