es6类方法无法到达此实例

时间:2018-09-06 12:53:46

标签: javascript node.js ecmascript-6 this

所以我做了一个类,不知道为什么我无法在一个方法内到达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()

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

1 个答案:

答案 0 :(得分:2)

由于this以及它如何基于调用时上下文而动态绑定。调用Emails.setupEmail时,其中的this不会是您导出的Emails实例。调用时,可以使用箭头函数定义您的方法 bind(Emails)