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 的浏览器中加载。