Задать вопрос
@wOneBvll

Почему не может прочитать свойство?

Пишу слайдер, и не понимаю как мне либо установить this, либо по-другому обратиться к свойству объекта.
Через функцию получилось, захотелось преобразить код.

class Autoslider {
  constructor(elem) {
    this.body = elem.querySelector('.autoslider__body')
    this.content = elem.querySelector('.autoslider__content')
    this.slides = elem.querySelectorAll('.autoslider__slide')
    this.slide_active = elem.querySelector('autoslider__slide_active')
  }

  animation() {
    let slideIndex = 0;
    setInterval(showSlide, 2000);    
    function showSlide() {

      this.slides.forEach(slide => slide.classList.remove('autoslider__slide_active'))
      this.slides[slideIndex].classList.add('autoslider__slide_active');

      if (slideIndex == this.slides.length - 1) {
        slideIndex = -1;
      }
      slideIndex++;
    }
  }
}

let autoslider = new Autoslider(document.querySelector('.autoslider'))
autoslider.animation()
  • Вопрос задан
  • 81 просмотр
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
wapster92
@wapster92 Куратор тега JavaScript
function создает собственный контекст this, используй стрелочную функцию или бинди контекст. И ты в селекторе точку пропустил.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Kasperenysh
@Kasperenysh
Рецидив в особо острой форме))
Вынеси showSlide как метод класса, и обратись к нему в методе animation как this.showSlide

Либо используй стрелочную функцию, как выше подсказали
Ответ написан
Комментировать
r0n1x
@r0n1x
html, css, js
let slideIndex = 0;
    const ctx = this;


Соответственно в showSlide заменить все this на ctx
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы