gpt4 book ai didi

node.js - Nodejs异步函数原型(prototype)链错误

转载 作者:太空宇宙 更新时间:2023-11-03 22:45:29 27 4
gpt4 key购买 nike

为什么这段代码可以编译

var Person =  function() {
console.log("CALLED PERSON")};

Person.prototype.saySomething = function() {
console.log("saySomething PERSON")};

var ape = new Person();
ape.saySomething();

并且此代码抛出错误 Cannot set property 'saySomething' of undefined

var Person =  async function() {
console.log("CALLED PERSON")};

Person.prototype.saySomething = function() {
console.log("saySomething PERSON")};

var ape = new Person();
ape.saySomething();

最佳答案

当您使用async function() {}时,您正在声明一个异步函数对象。这与常规的 function 对象不同。异步函数对象没有原型(prototype)。

所以,当你尝试这样做时:

var Person =  async function() {
console.log("CALLED PERSON")
};

Person.prototype.saySomething = function() {
console.log("saySomething PERSON")
};

Person.prototype未定义,因为异步函数 对象上没有prototype。因此,尝试将某些内容分配给 Person.prototype.saySomething 会导致您看到错误,因为 Person.prototype未定义

这有一些逻辑,因为异步函数不能用作构造函数,因为异步函数总是返回一个 Promise,因此它永远不能返回一个新对象,如 let obj = new f( )。因此,拥有 .prototype 属性没有任何意义,因为它不能以这种方式使用。

如果您确实想异步创建对象,则始终可以创建一个 async 工厂函数,该函数返回一个用对象解析的 Promise。

关于node.js - Nodejs异步函数原型(prototype)链错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49205519/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com