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 的瀏覽器中載入。