0

Всем привет! Не могу понять, почему addEventListener из одного метода класса не видит другой метод этого же класса. Получаю ошибку Uncaught TypeError: this.movePath is not a function. Из других методов метод movePath(path) доступен. Код такой

movePath(path) {
        console.log(path)
    }

addEventListeners() { const command = [].slice.call(document.querySelectorAll('.file')) command.forEach(function(command) { command.addEventListener('dblclick', function(e) { this.movePath(e.target.dataset.name); }, false) }) }

Заранее спасибо! UPD. self.movePath(e.target.dataset.name); тоже не работает

Volloff
  • 11
  • 4
  • а это self из воздуха у вас, надо полагать, взялось? – teran May 02 '22 at 21:50

2 Answers2

0

Это зависит от того, как вы используете этот класс. Поэтому вы должны использовать

 static movePath(){
 console.log('Some text')
}
0

Вот таким образом решается проблема потери контекста.

addEventListeners() {
        let that = this;// тут
        const command = [].slice.call(document.querySelectorAll('.file'))
        command.forEach(function(command) {
            command.addEventListener('dblclick', function(e) {
                that.movePath(e.target.dataset.name);
            })
        })
    }

Вроде как есть еще варианты решения с call или aply но я решил воспользоваться этим способом

Volloff
  • 11
  • 4