尝试使用方法在 OOP 中设置轮播的间隔

Trying to set an interval for a carrousel in OOP, using methods

对于一个学校项目,我正在编写幻灯片,javascript 部分应该使用面向对象的编程 - 我有一个方法 "nextSlide" 可以在图像之间切换以使旋转木马动画,我想要每 5 秒自动执行的动画:

我试过下面的代码,但它似乎不起作用,

var diaporama = {
  slides : document.querySelectorAll('#slides .slide'),
  currentSlide : 0,

  nextSlide : function() {
      slides[currentSlide].className = 'slide';
      currentSlide = (currentSlide+1)%slides.length;
      slides[currentSlide].className = 'slide showing';
  },
  slideInterval : function() {
    setInterval(this.nextSlide(), 5000)
  }
}

diaporama.slideInterval();

动画不执行,Firefox 给我以下错误:SyntaxError: expected expression, got ':' 语法错误:缺少形式参数

编辑:我找到了一种通过像这样调整我的代码来使其工作的方法:

  nextSlide : function() {
      this.slides[this.currentSlide].className = 'slide';
      this.currentSlide = (this.currentSlide+1)%this.slides.length;
      this.slides[this.currentSlide].className = 'slide showing';
  }

}

var myVar = setInterval("diaporama.nextSlide()", 5000)

如果我将此引用添加到 nextSlide 函数,它会起作用:

  nextSlide : function() {
      this.slides[this.currentSlide].className = 'slide';
      this.currentSlide = (this.currentSlide+1)%this.slides.length;
      this.slides[this.currentSlide].className = 'slide showing';
  }

}

var myVar = setInterval("diaporama.nextSlide()", 5000)

OOP 学校项目的代码如何,我认为您可以使用更好的 OOP 方式编写代码:


    class Diaporama {
        constructor(containerSelector, itemSelector, interval) {

            var _containerSelector = containerSelector;
            var _itemSelector = itemSelector;
            var _interval = interval;

            var _slides = document.querySelectorAll(selector);
            var _currentSlide = 0;

            setSlideInterval();
        }

        get slides() {
            return this._slides;
        }

        set slides(value) {
            this._slides = value;
        }

        get currentSlide() {
            return this._currentSlide;
        }

        set currentSlide(value) {
            this._slid_currentSlidees = value;
        }

        get containerSelector() {
            return this._containerSelector;
        }

        get itemSelector() {
            return this._itemSelector;
        }

        get interval() {
            return this._interval;
        }

        nextSlide() {
            slides[currentSlide].className = this.itemSelector;
            currentSlide = (currentSlide + 1) % slides.length;
            slides[currentSlide].className = this.itemSelector + ' showing';
        }

        setSlideInterval() {
            setInterval(this.nextSlide(), this.interval);
        }
    }
    //instance
    var mySlide = new Diaporama('#slides', '.slide', 5000);

这里是参考 javascript 类: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

get 语法将对象 属性 绑定到一个函数,该函数将在查找 属性 时调用 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get)

set 语法将对象 属性 绑定到一个函数,当试图设置 属性 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set)