Прослушиватель событий Javascript в классе

#javascript

Вопрос:

 class ProfileCollaboration {

    constructor() { 
        document.addEventListener('profileEvent', this.profileEvent)
    }

    profileEvent(event) {
        let profileEvent = event.detail
    
        if (profileEvent.name !== 'profileEditing') {
            return
        }
    
        if (profileEvent.editing === true) {
            console.log(this)
            this.enableEditingMode()
        } else {
            this.disableEditingMode()
        }
    }

    enableEditingMod() {
        console.log('enabled');
    }

    disableEditingMode() {
        console.log('disabled');
    }

}
 

В журнале консоли говорится: this.enableditingmode не является функцией

Это правильно, потому что теперь это контекст списка добавлений.

Как я могу прослушивать события внутри класса js?

Комментарии:

1. Есть ли profileEvent какое-то событие?

2. Эм, люди, вы понимаете, что можете запускать любые пользовательские события? 🙂

Ответ №1:

обратные вызовы прослушивателя событий по умолчанию привязаны к элементу.

Если вы хотите, чтобы это работало, вы должны прикрепить его вот так:

 document.addEventListener('profileEvent', this.profileEvent.bind(this));
 

Комментарии:

1. Большое спасибо, я даже сейчас не знал о существовании привязки developer.mozilla.org/de/docs/Web/JavaScript/Reference/… это потрясающе!