Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Методы класса ES6 и области видимости (https://javascript.ru/forum/misc/71837-metody-klassa-es6-i-oblasti-vidimosti.html)

Luca 16.12.2017 18:24

Методы класса ES6 и области видимости
 
Здравствуйте.
Вопрос, конечно, "баян-бабаян" сто раз заданный, но я не нашёл ответ...
В книгах про классы ES6 всё так весело и безоблачно...
class Widget{
    constructor(elem){
        let inner = document.create('div')
        inner.textContent = 'CONTENT'
        inner.addEventListener('click', this.listener)
        inner.dataset.any = 'Hello'
        
        elem.appendChild(inner)
    }
    listener(e){
        this.notVisibleMethod(e.target)
    }
    notVisibleMethod(node){
        if(node.dataset.any === 'Hello'){
            alert('Hello')    
        }
    }

}
let app = document.getElemetById('app')
let widget = new Widget(app)

listener виден, те, если я просто пишу в listener "alert('Hello')", то работает, но из листенера не видно "не зги"...
я упростил, естественно, но суть ясна для опытных: в лситенер не видит notVisibleMethod.
я даже понимаю, что контекст листенера это HTMLElement...
радости всё равно мало :-E
я даже Webpack настроил и у меня всё собирается: sass, babel, uglify, но когда "тык", то "is not a function..."

рони 16.12.2017 18:37

Luca,
inner.addEventListener('click', this.listener.bind(this))

рони 16.12.2017 18:39

Luca,
https://javascript.ru/forum/dom-wind...tml#post470583

Luca 16.12.2017 18:56

рони,
listener то видно, а вот из listener уже "не зги" не видно

рони 16.12.2017 19:00

Цитата:

Сообщение от Luca
listener то видно, а вот из listener уже "не зги" не видно

что вы потеряли? может вам рабочий макет сделать из вашей схемы и убедится, что всё работает...

Aetae 16.12.2017 19:44

inner.addEventListener('click', this)
...
handleEvent(e){
    if(e.type === 'click')
        this.notVisibleMethod(e.target)
}


Часовой пояс GMT +3, время: 10:29.