Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.08.2019, 14:08
Новичок на форуме
Отправить личное сообщение для Piterom Посмотреть профиль Найти все сообщения от Piterom
 
Регистрация: 28.06.2019
Сообщений: 9

Help, друзья! Разбираю что такое классы и конструкторы... В коде есть комментарии
class Slider {
constructor(sliderClass) {
this.images = document.querySelectorAll(`${sliderClass} img`);
this.nextImg= document.querySelector(`${sliderClass} .next`);
this.prevImg= document.querySelector(`${sliderClass} .prev`);
// Здесь я могу вывести в консоль поля конструктора
}

events() {
this.nextImg.addEventListener('click', this.slideNext);
this.prevImg.addEventListener('click', this.slidePrev);
}

slideNext() {
console.log(this.nextImg);
// А вот здесь и в методе ниже уже undefined. Подскажите в чем причина? Что это? - потеря контекста или как то иначе называется? И как правильно получить доступ к полям
}

slidePrev() {
console.log(this.prevImg);
}
}

const slider1 = new Slider('.slider1');
slider1.events();
Ответить с цитированием
  #2 (permalink)  
Старый 16.08.2019, 14:48
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 921

Все верно так и должно быть.

Ситуация не описана но можно додумать что проблема возникает в момент клика на изображение и в этот момент this ведет себя не так как ты ожидаешь.

в JS this имеет динамическую природу и фактическое его значение определяется в момент фактического вызова функции
Ответить с цитированием
  #3 (permalink)  
Старый 16.08.2019, 15:01
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 12,474

addEventListener() создает "свой" this... Это ссылка на элемент, на котором произошло событие.
Ответить с цитированием
  #4 (permalink)  
Старый 16.08.2019, 15:03
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 12,474

Сообщение от MallSerg
Ситуация не описана
Описана в доке на addEventListener()...
https://learn.javascript.ru/introduc...tu-cherez-this
Ответить с цитированием
  #5 (permalink)  
Старый 16.08.2019, 20:35
Новичок на форуме
Отправить личное сообщение для Piterom Посмотреть профиль Найти все сообщения от Piterom
 
Регистрация: 28.06.2019
Сообщений: 9

Спасибо, ребят. Прочел статью, понял свою ошибку. Но решения так и не нашел. Как же все таки можно вызвать this в контексте класса а не события, или как решить задачу иначе?
Ответить с цитированием
  #6 (permalink)  
Старый 16.08.2019, 20:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,662

Piterom,
'click', this.slideNext.bind(this)
Ответить с цитированием
  #7 (permalink)  
Старый 16.08.2019, 20:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 26,662

Piterom,
https://javascript.ru/forum/events/7...tml#post511173
Ответить с цитированием
  #8 (permalink)  
Старый 16.08.2019, 21:24
Новичок на форуме
Отправить личное сообщение для Piterom Посмотреть профиль Найти все сообщения от Piterom
 
Регистрация: 28.06.2019
Сообщений: 9

Ребята, спасибо!
Нужно было всего лишь вызвать функцию сразу) 7 часов мучений, а дело в двух скобках)))
this.nextBtn.addEventListener('click', () => this.slideNext());
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что такое "шаблоны"? jsuse Серверные языки и технологии 5 11.07.2012 07:22
Психологическая деформация программистов DreamTheater Оффтопик 59 24.03.2012 03:03
http://gigalit.info - Мои контакты Маэстро Ваши сайты и скрипты 70 08.12.2011 01:12
фрактальный сыр x-yuri Оффтопик 76 23.11.2011 19:59
О фрилансе (Личный опыт) free Оффтопик 105 18.08.2011 16:02