Методы класса es6 не могут достичь этого экземпляра - PullRequest
0 голосов
/ 06 сентября 2018

Итак, я создал класс и понятия не имею, почему не могу получить экземпляр 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 голосов
/ 06 сентября 2018

Из-за this и его динамической привязки в зависимости от контекста времени вызова. Когда вы вызываете Emails.setupEmail, внутри него this не будет экспортируемый вами экземпляр Emails. Используйте стрелки для определения своих методов или bind(Emails) при вызове.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...