Контекст объекта внутри метода с параметром event
Подскажите в такой ситуации.
Есть объект: const testApp = { typesAll: document.querySelectorAll('.type'), type: '', event: function() { this.typesAll.forEach( item => item.addEventListener('click', this.selectType)); // Вызов метода }, selectType: function (e) { if (e.type == 'click' || (e.type == 'keypress' && (e.which === 13 || e.keyCode === 13))) { testApp.type = this.getAttribute('name'); // тут testApp заменить контекстом объекта??? } } } Метод selectType принимает параметр event. Внутри метода я специально оставил кусок кода чтоб показать что методу нужны event и контекст элемента по которому произошел клик, чтоб получить значение из атрибута name. Вопрос: могу ли я в 16 строке заменить testApp контекстом объекта, чтоб не писать имя объекта? При этом мне остаются нужны event и контекст элемента по которому произошёл клик. Вроде как можно через call и apply передать, но я не знаю как тогда правильно передать event и контекст самого элемента по которому сделан клик. ***Ага, элемент можно передать как item, сам объект как this. Если можно всунуть всё это при вызове метода, покажите пожалуйста как правильно это делается. Или лучше в данном случае оставить так как есть? |
Или:
item.addEventListener('click', event => this.selectType(event)) или: item.addEventListener('click', this.selectType.bind(this)) или(имхо лучше всего): item.addEventListener('click', this) const testApp = { ... handleEvent(e){ if (e.type == 'click' || (e.type == 'keypress' && (e.which === 13 || e.keyCode === 13))){ this.selectType(e); } } } К самому элементу обращаться в любом случае надо через event.target. |
MC-XOBAHCK,
:-? const testApp = { typesAll: document.querySelectorAll('.type'), type: '', event: function() { this.typesAll.forEach(item => item.addEventListener('click', this.selectType(this))); // Вызов метода }, selectType: function(obj) { return function(e) { if (e.type == 'click' || (e.type == 'keypress' && (e.which === 13 || e.keyCode === 13))) { obj.type = this.getAttribute('name'); // тут testApp заменить контекстом объекта??? } } } } |
Часовой пояс GMT +3, время: 22:13. |