javascript - es6 类方法无法访问此实例
问题描述
所以我做了一个类,不知道为什么我不能this
在一个方法中访问实例。
所以在我的路由器中,我正在调用这样的方法
import Emails from '../controllers/emails'
import router from 'express'
....
route.post('/', Emails.setupEmail)
所以在调用POST
方法之后它调用setupEmail
方法但它与消息一起崩溃:
TypeError:无法读取未定义的属性“availableEmailTypes”
和类的代码:
class Emails {
constructor() {
this.availableEmailTypes = ['registration', 'forgot-password', 'two-factor']
}
setupEmail(req, res) {
if (!req.body.type || !req.body.type.include(this.availableEmailTypes)) {
return res.status(422).send({ success: false, message: 'Invalid email type' })
}
switch (req.body.type) {
case 'registration':
break
}
}
}
export default new Emails()
所以主要问题是为什么我无法访问在构造函数上创建的数组?
解决方案
因为this
以及它是如何基于调用时上下文动态绑定的。当您调用Emails.setupEmail
时,其中this
不会是Emails
您导出的实例。要么使用箭头函数来定义你的方法,要么 bind(Emails)
在你调用它的时候。
推荐阅读
- python - 将 pandas 中的正则表达式值转换为 0 或 1
- javascript - Node - hackathon starter 无法加载静态文件?
- javascript - 无法在 document.write 元素之前设置属性“onclick”为 null
- memory-leaks - 每次碰撞迭代libGDX的渐进滞后
- android - 使用 Firestore 按键入的字母搜索
- google-cloud-platform - Google Cloud - 从不同的电子邮件地址使用了错误的项目 ID
- paypal - IPN 模拟器说接受,但验证总是返回“无效”
- c# - 在使用内存流作为 TiffBitmap 解码器的输入时需要帮助
- awk - 如何匹配 2 个文件并导出到输出?
- node.js - 将 process.env 转换为
与 TS