Контекст объекта внутри метода с параметром 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, время: 01:19. |