JavaScript参考手册
全球对象 | Global Objects
WebAssembly
这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
WebAssembly
JavaScript 对象是所有 WebAssembly 相关功能的命名空间。
和大多数全局对象不一样,WebAssembly 不是一个构造函数(它不是一个函数对象)。它类似于 Math
对象或者Intl
对象,Math 对象也是一个命名空间对象,用于保存数学常量和函数;Intl则是用于国际化和其他语言相关函数的命名空间对象。
描述
WebAssembly 对象主要用于:
- 使用
WebAssembly.instantiate()
函数加载 WebAssembly 代码。
- 通过
WebAssembly.Memory()
/WebAssembly.Table()
构造函数创建新的内存和表实例。
- 由
WebAssembly.CompileError()
/WebAssembly.LinkError()
/WebAssembly.RuntimeError()
构造函数来提供 WebAssembly 中的错误信息。
方法
WebAssembly.instantiate()
用于编译和实例化 WebAssembly 代码的主 API,返回一个 Module 和它的第一个实例。
WebAssembly.compile()
把 WebAssembly 二进制代码编译为一个 WebAssembly.Module
,不进行实例化。
WebAssembly.validate()
校验 WebAssembly 二进制代码的 typed array是否合法,合法则返回 true ,否则返回 false 。
构造器
WebAssembly.Module()
创建一个新的WebAssembly模块对象。
WebAssembly.Instance()
创建一个新的WebAssembly实例对象。
WebAssembly.Memory()
创建一个新的WebAssembly内存对象。
WebAssembly.Table()
创建一个新的WebAssembly表格对象。
WebAssembly.CompileError()
创建一个新的WebAssembly编译错误对象。
WebAssembly.LinkError()
创建一个新的WebAssembly链接错误对象。
WebAssembly.RuntimeError()
创建一个新的WebAssembly运行时错误对象。
示例
通过fetch方法获取了WebAssembly字节码后,我们通过WebAssembly.instantiate()
方法对模块进行编译和实例化,在这过程中将一个JavaScript 函数导入WebAssembly模块。这个promise实例解析成一个对象(result),result包含编译了的Module和Instance对象。接下来我们调用一个Instance导出的WebAssembly方法。
var importObject = {
imports: {
imported_func: function(arg) {
console.log(arg);
}
}
};
fetch('simple.wasm').then(response =>
response.arrayBuffer()
).then(bytes =>
WebAssembly.instantiate(bytes, importObject)
).then(result =>
result.instance.exports.exported_func()
);
注意: 有关使用了我们 fetchAndInstantiate()
库函数的示例,请查看Github上的 index.html (或者查看在线示例) 。
规范
Specification |
Status |
Comment |
---|---|---|
Web Assembly JavaScript APIThe definition of 'WebAssembly' in that specification. |
Draft |
Initial draft definition. |
浏览器兼容性
Feature |
Chrome |
Edge |
Firefox |
Internet Explorer |
Opera |
Safari |
---|---|---|---|---|---|---|
Basic Support |
57 |
16 |
522 |
No |
44 |
11 |
CompileError |
57 |
16 |
522 |
No |
44 |
11 |
Instance |
57 |
16 |
522 |
No |
44 |
11 |
LinkError |
57 |
16 |
522 |
No |
44 |
11 |
Memory |
57 |
16 |
522 |
No |
44 |
11 |
Module |
57 |
16 |
522 |
No |
44 |
11 |
RuntimeError |
57 |
16 |
522 |
No |
44 |
11 |
Table |
57 |
16 |
522 |
No |
44 |
11 |
compile |
57 |
16 |
522 |
No |
44 |
11 |
instantiate |
57 |
16 |
522 |
No |
44 |
11 |
validate |
57 |
16 |
522 |
No |
44 |
11 |
Feature |
Android |
Chrome for Android |
Edge mobile |
Firefox for Android |
IE mobile |
Opera Android |
iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support |
57 |
57 |
(Yes)1 |
522 |
No |
? |
11 |
CompileError |
57 |
57 |
(Yes)1 |
522 |
No |
? |
11 |
Instance |
57 |
57 |
(Yes)1 |
522 |
No |
? |
11 |
LinkError |
57 |
57 |
(Yes)1 |
522 |
No |
? |
11 |
Memory |
57 |
57 |
(Yes)1 |
522 |
No |
? |
11 |
Module |
57 |
57 |
(Yes)1 |
522 |
No |
? |
11 |
RuntimeError |
57 |
57 |
(Yes)1 |
522 |
No |
? |
11 |
Table |
57 |
57 |
(Yes)1 |
522 |
No |
? |
11 |
compile |
57 |
57 |
(Yes)1 |
522 |
No |
? |
11 |
instantiate |
57 |
57 |
(Yes)1 |
522 |
No |
? |
11 |
validate |
57 |
57 |
(Yes)1 |
522 |
No |
? |
11 |
全球对象 | Global Objects相关

JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络