Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.11.2018, 23:17
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

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

Если можно всунуть всё это при вызове метода, покажите пожалуйста как правильно это делается.

Или лучше в данном случае оставить так как есть?

Последний раз редактировалось MC-XOBAHCK, 11.11.2018 в 23:37.
Ответить с цитированием
  #2 (permalink)  
Старый 12.11.2018, 00:09
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,491

Или:
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.
__________________
29375, 35

Последний раз редактировалось Aetae, 12.11.2018 в 00:19.
Ответить с цитированием
  #3 (permalink)  
Старый 12.11.2018, 00:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

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 заменить контекстом объекта???

            }

        }
    }

}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить свойство внутри метода объекта hoax Элементы интерфейса 2 24.01.2016 12:28
Вызов метода внутри объекта feoalter7 Общие вопросы Javascript 4 01.07.2014 16:23
Объявление метода внутри объекта JAVASCRIPt Golovastik Общие вопросы Javascript 4 07.03.2011 12:11
[jQuery] [Обработка клика] Как не потерять текущий контекст внутри обработчика? xintrea Events/DOM/Window 1 10.02.2011 16:34
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00