首页 > 解决方案 > 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()

所以主要问题是为什么我无法访问在构造函数上创建的数组?

标签: javascriptnode.jsecmascript-6this

解决方案


因为this以及它是如何基于调用时上下文动态绑定的。当您调用Emails.setupEmail时,其中this不会是Emails您导出的实例。要么使用箭头函数来定义你的方法,要么 bind(Emails)在你调用它的时候。


推荐阅读