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 介面 # 全域性變數 |
瀏覽器相容性
載入中…