WebAssembly.Global
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.Global
はグローバル変数のインスタンスを表します。JavaScript からアクセスでき、1 つ以上の WebAssembly.Module
インスタンス間でインポート/エクスポートすることができます。これにより複数のモジュールを動的にリンクすることができます。
コンストラクター
WebAssembly.Global()
-
新しい
Global
オブジェクトを生成します。
Global のインスタンス
すべての Global
のインスタンスは Global()
コンストラクターのプロパティオブジェクトを継承します。これによりすべての Global
インスタンスを変更することができます。
インスタンスプロパティ
Global.prototype.constructor
-
このオブジェクトのインスタンスを生成した関数を返します。既定では、これは
WebAssembly.Global()
コンストラクターです。 Global.prototype[@@toStringTag]
-
@@toStringTag プロパティの初期値で、文字列値 "WebAssembly.Global" です。
Global.prototype.value
-
グローバル変数の中に含まれている値です。これにより、グローバル値を直接設定および取得することができます。
インスタンスメソッド
Global.prototype.valueOf()
-
グローバル変数の中に含まれている値を返す古い形のメソッドです。
例
新しい Global インスタンスの生成
以下の例では新しいグローバルインスタンスは WebAssembly.Global()
コンストラクターを用いて初期化され、初期値 0 の変更可能な i32
型として定義されます。
その後この値は、Global.value
プロパティを使うことによって 42
に、global.wasm
モジュールから公開された(どんな値が与えられても 1 を加算して、新しい値を返す)incGlobal()
関数を使うことによって 43
になります。
const output = document.getElementById("output");
function assertEq(msg, got, expected) {
const result =
got === expected
? `SUCCESS! Got: ${got}<br>`
: `FAIL!<br>Got: ${got}<br>Expected: ${expected}<br>`;
output.innerHTML += `Testing ${msg}: ${result}`;
}
assertEq("WebAssembly.Global exists", typeof WebAssembly.Global, "function");
const global = new WebAssembly.Global({ value: "i32", mutable: true }, 0);
WebAssembly.instantiateStreaming(fetch("global.wasm"), { js: { global } }).then(
({ instance }) => {
assertEq(
"getting initial value from wasm",
instance.exports.getGlobal(),
0,
);
global.value = 42;
assertEq(
"getting JS-updated value from wasm",
instance.exports.getGlobal(),
42,
);
instance.exports.incGlobal();
assertEq("getting wasm-updated value from JS", global.value, 43);
},
);
メモ: この例はGitHub 上の実行例で確認できます。また、ソースコードも参照してください。
仕様書
Specification |
---|
WebAssembly JavaScript Interface # globals |
ブラウザーの互換性
BCD tables only load in the browser