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 October 2017.
WebAssembly.Global
对象表示一个全局变量实例,可以被 JavaScript 和 importable/exportable 访问,跨越一个或多个 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()
构造函数创建一个新的实例。它定义为可修饰的类型为i32
,值为 0。
global 的值发生改变,首先设置Global.value
为 42,然后使用导出函数 incGlobal()
增加为 43. 导出函数在 global.wasm
模块中 (它将参数的值加一并返回).
js
const output = document.getElementById("output");
function assertEq(msg, got, expected) {
output.innerHTML += `Testing ${msg}: `;
if (got !== expected)
output.innerHTML += `FAIL!<br>Got: ${got}<br>Expected: ${expected}<br>`;
else output.innerHTML += `SUCCESS! Got: ${got}<br>`;
}
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 上运行的实时示例;也可以查看源代码。
规格
Specification |
---|
WebAssembly JavaScript Interface # globals |
浏览器兼容性
BCD tables only load in the browser