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 2020年3月.
WebAssembly.Global
对象表示一个全局变量实例,可以在 JavaScript 中访问,也可以在 WebAssembly.Module
实例之间导入/导出。这允许动态链接多个模块。
构造函数
WebAssembly.Global()
-
创建一个新的
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()
构造函数创建一个新的 global 实例。它被定义为可变的 i32
类型,值为 0。
然后改变 global 的值,首先用 Global.value
属性设置为 42
,然后用从 global.wasm
模块导出的 incGlobal()
函数设置为 43(它将接收到的参数的值加 1 并返回)。
js
const output = document.getElementById("output");
function assertEq(msg, got, expected) {
const result =
got === expected
? `成功!获得:${got}\n`
: `失败!\n获得:${got}\n期望的是:${expected}\n`;
output.innerText += `测试${msg}:${result}`;
}
assertEq("WebAssembly.Global 存在", typeof WebAssembly.Global, "function");
const global = new WebAssembly.Global({ value: "i32", mutable: true }, 0);
WebAssembly.instantiateStreaming(fetch("global.wasm"), { js: { global } }).then(
({ instance }) => {
assertEq("从 wasm 获取初始值", instance.exports.getGlobal(), 0);
global.value = 42;
assertEq("从 wasm 获取用 JS 更新的值", instance.exports.getGlobal(), 42);
instance.exports.incGlobal();
assertEq("从 JS 获取用 wasm 更新的值", global.value, 43);
},
);
备注: 你可以查看在 GitHub 上实时运行的示例;也可以查看源代码。
规范
Specification |
---|
WebAssembly JavaScript Interface> # globals> |
浏览器兼容性
Loading…