WebAssembly.Module.exports()

これは実験的な機能です。本番で使用する前にブラウザー実装状況をチェックしてください。

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

構文

var exports = WebAssembly.Module.exports(module);

パラメータ

module
WebAssembly.Module オブジェクト。

戻り値

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

例外

もしモジュールが WebAssembly.Module オブジェクトインスタンス出ない場合、TypeError がスローされます。

次の例では (Github のデモ index-compile.html と、動作例 もご確認ください) WebAssembly.compile() 関数を使用してロードした simple.wasm をコンパイルして、 postMessage() を使用してそれを worker に送信しています。

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

fetch('simple.wasm').then(response =>
  response.arrayBuffer()
).then(bytes =>
  WebAssembly.compile(bytes)
).then(mod =>
  worker.postMessage(mod)
);

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

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] のアウトプットはこのようになります:

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

仕様

仕様 策定状況 コメント
WebAssembly JavaScript Interface
exports() の定義
草案 Initial draft definition.

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
exportsChrome 完全対応 57Edge 完全対応 16Firefox 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
IE 未対応 なしOpera 完全対応 44Safari 完全対応 11WebView Android 完全対応 57Chrome Android 完全対応 57Firefox Android 完全対応 52
補足
完全対応 52
補足
補足 Disabled in the Firefox 52 Extended Support Release (ESR).
Opera Android ? Safari iOS 完全対応 11Samsung Internet Android 完全対応 7.0nodejs 完全対応 8.0.0

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実装ノートを参照してください。
実装ノートを参照してください。

関連情報