AsyncFunction 构造函数用来创建新的 异步函数 对象,JavaScript 中每个异步函数实际上都是 AsyncFunction 的对象。(The AsyncFunction constructor creates a new async function object. In JavaScript every asynchronous function is actually an AsyncFunction object.)
注意:AsyncFunction 并不是一个全局对象,需要通过下面的方法来获取:
Object.getPrototypeOf(async function(){}).constructor
语法
new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)
参数:
- arg1, arg2, … argN。函数的参数名,它们是符合 JavaScript 标示符规范的一个或多个用逗号隔开的字符串。例如
x、theValue、或 a,b。 - functionBody:一段字符串形式的 JavaScript 语句,这些语句组成了新函数的定义。
使用AsyncFuncFunction构造函数创建的 异步函数对象 在创建函数时被解析。这比用异步函数表达式( async function expression)声明异步函数并在代码中调用它效率更低,因为这些函数将与代码的其余部分进行解析。
传递给函数的所有参数都被当作 要创建的函数中 参数的标识符的名称。
调用 AsyncFunction 构造函数时可以省略 new,其效果是一样的。(Invoking the AsyncFunction constructor as a function (without using the new operator) has the same effect as invoking it as a constructor.)
属性
AsyncFunction.length:AsyncFunction 构造函数的 length 属性,值为 1。
AsyncFunction.prototype:通过原型对象可以为所有异步函数对象定义额外的属性。
AsyncFunction 原型对象
AsyncFunction.constructor:默认值为 AsyncFunction。
AsyncFunction.prototype[@@toStringTag]:返回 “AsyncFunction”。
AsyncFunction 实例
AsyncFunction实例从AsyncFunction.prototype
继承方法和属性。与所有构造函数一样,可以更改构造函数的原型对象,以对所有AsyncFunction实例进行更改。
举例:通过 AsyncFunction 构造器创建一个异步函数
function resolveFun(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
})
}
let AsyncFunc = Object.getPrototypeOf(async function () { }).constructor;
let a = new AsyncFunc('a', 'b', 'return await resolveFun(a) + await resolveFun(b)');
a('happy', 'chen').then(v => {
console.log(v);
})
//happychen