WebAssembly.Global - JavaScript 编辑
WebAssembly.Global
对象表示一个全局变量实例, 可以被JavaScript 和importable/exportable 访问 ,跨越一个或多个WebAssembly.Module
实例. 他允许被多个modules动态连接.
构造函数语法
创建一个新的全局
对象。
Global 实例
所有的 Global
实例 继承自 Global()
构造函数 prototype object — 修改会影响 所有 Global
实例.
实例属性
Global.prototype.constructor
- 返回创建对象实例的函数. 缺省为构造函数为
WebAssembly.Global()
Global.prototype[@@toStringTag]
- 属性 @@toStringTag 初始值为字符串 "WebAssembly.Global".
Global.prototype.value
- 全局变量包含的值 — 可以直接用于设置和获取全局变量的值.
实例方法
Global.prototype.valueOf()
- 旧式的方法,返回全局变量包含的值.
例子
创建 Global 实例
以下例子展示了使用 WebAssembly.Global()
构造函数创建一个新的实例. 它定义为可修饰的 类型为i32
, 值为 0.
global的值发生改变, 首先设置Global.value
为42, 然后使用导出函数 incGlobal()
增加为43. 导出函数在 global.wasm
模块中(它将参数的值加一并返回).
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);
});
注意: 你可以在running live on GitHub 查看例子; 也可以访问source code.
规格
规格 | 状态 | 解释 |
---|---|---|
WebAssembly JavaScript Interface WebAssembly.Global() | Working Draft | Initial draft definition. |
浏览器兼容性
BCD tables only load in the browser
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.See also
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论