WebAssembly.Global

一個WebAssembly.Global物件表示一個全域性變數例項,可從 JavaScript 訪問,也可在跨一個或多個WebAssembly.Module例項之間匯入/匯出。這允許多個模組的動態連結。

建構函式

WebAssembly.Global()

建立一個新的 Global 物件。

全域性例項

所有 Global 例項都繼承自 Global() 建構函式的原型物件——可以修改此物件以影響所有 Global 例項。

例項屬性

Global.prototype.constructor

返回建立此物件例項的函式。預設情況下,這是WebAssembly.Global()建構函式。

Global.prototype[Symbol.toStringTag]

[Symbol.toStringTag]屬性的初始值為字串“WebAssembly.Global”。

Global.prototype.value

全域性變數中包含的值——可用於直接設定和獲取全域性變數的值。

例項方法

Global.prototype.valueOf()

舊式方法,返回全域性變數中包含的值。

示例

建立新的 Global 例項

以下示例顯示了使用WebAssembly.Global()建構函式建立的新全域性例項。它被定義為可變的i32型別,值為 0。

然後更改全域性變數的值,首先使用Global.value屬性將其更改為42,然後使用global.wasm模組匯出的incGlobal()函式將其更改為 43(此函式將 1 加到給定的任何值上,然後返回新值)。

js
const output = document.getElementById("output");

function assertEq(msg, got, expected) {
  const result =
    got === expected
      ? `SUCCESS! Got: ${got}\n`
      : `FAIL!\nGot: ${got}\nExpected: ${expected}\n`;
  output.innerText += `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 上檢視執行中的示例;另請參閱原始碼

規範

規範
WebAssembly JavaScript 介面
# 全域性變數

瀏覽器相容性

BCD 表格僅在啟用 JavaScript 的瀏覽器中載入。

另請參閱