为啥 Javascript 无法识别我的构造函数?
Posted
技术标签:
【中文标题】为啥 Javascript 无法识别我的构造函数?【英文标题】:Why does Javascript not recognize my constructor?为什么 Javascript 无法识别我的构造函数? 【发布时间】:2021-07-23 08:35:44 【问题描述】:我遇到的问题是脚本无法识别类中的构造函数,并假设我将所有其他函数都称为构造函数。
class Articles
constructor(dbName = ':memory:')
return(async() =>
this.db = await sqlite.open(dbName)
const sql = //an Sql command goes here
await this.db.run(sql)
return this
)()
async all()
const sql = 'SELECT users.user, articles.* FROM articles, users\
WHERE articles.userid = users.id;'
const articles = await this.db.all(sql)
for(const index in articles)
if(articles[index].photo === null) articles[index].photo = 'avatar.jpg'
const dateTime = new Date (articles[index].D&T)
const date = `$dateTime.getDate()/$dateTime.getMonth()+1/$dateTime.getFullYear()`
articles[index].Date_Time = date
return articles
async add(data)
console.log('ADD')
console.log(data)
return true
async close()
await this.db.close()
export default Articles
当我运行这部分代码时:
router.post('/add', async ctx =>
const a = await new Articles(dbName)
try
await new a.add(ctx.request.body)
return ctx.redirect('/?msg=new article added')
catch(err)
console.log(err)
await ctx.render('error', ctx.hbs)
finally
new a.close()
)
这是我得到的错误:
It Keeps telling me that the function is not a constructor
谁能帮忙
【问题讨论】:
错误信息是正确的——“add”和“close”不是构造函数,它们是“Articles”类的方法。因此,在调用它们时不要使用“new”关键字 哥们我爱死你了!!!我已经坚持了8个小时以上了!!非常感谢! 【参考方案1】:“add”和“close”是“Articles”类的方法。调用这些方法时不要使用“new”关键字
router.post('/add', async ctx =>
const a = await new Articles(dbName)
try
await a.add(ctx.request.body) // <- don't need "new" here
return ctx.redirect('/?msg=new article added')
catch(err)
console.log(err)
await ctx.render('error', ctx.hbs)
finally
a.close() // <- don't need "new" here
)
【讨论】:
谢谢。就是这样!!以上是关于为啥 Javascript 无法识别我的构造函数?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 org.springframework.test.web.servlet.MockMvc 框架无法解析控制器的构造函数参数
如果我尝试在不同的公共类中将数组作为参数传递,为啥我的构造函数无法在 Java 中编译?