2017-08-01 8 views
2

の「className」の私はこれに新たなんだ、と誰かが説明できる場合には、本当に感謝:Javascriptのスライダー:キャッチされない例外TypeError:設定できませんプロパティ未定義

私がキャッチされない例外TypeErrorを得るのです理由:設定できませんプロパティが「classNameを'は未定義のコードですか?

require(
["jquery"], 
function($) { 

    function Slider() { 

     this.slides = document.querySelectorAll('#slides .slide');   
     this.currentSlide = 0; 
     this.slideInterval = 0; 

    } 

    Slider.prototype.startSlider = function(slideDuration) { 
     this.slideInterval = setInterval(this.nextSlide, slideDuration); 
    }; 

    Slider.prototype.nextSlide = function() { 

     this.slides[ this.currentSlide ].className = 'slide'; 
     this.currentSlide = (this.currentSlide+1) % this.slides.length; 
     this.slides[ this.currentSlide ].className = 'slide showing';   

    }; 

    Slider.prototype.goToThis = function() { 

    }; 

    Slider.prototype.goToNext = function() { 

    }; 

    Slider.prototype.goToPrev = function() { 

    }; 

    var slider = new Slider(); 
    slider.startSlider(1000); 

}); 

私はスライダー()クラスなしでそれを行うと、それが正常に動作します。

var slides = document.querySelectorAll('#slides .slide'); 
var currentSlide = 0; 
var slideInterval = setInterval(nextSlide,2000); 

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

可能な重複[?コールバックの内側に正しい\ 'この\'をアクセスする方法](https://stackoverflow.com/questions/20279484/how-to-access-the-correct-このコールインコールバック) –

+0

詳細を知りたい場合は、MDNが素晴らしいリソースです:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this – phuhgh

+0

すばらしいリンクこれは私が必要なものです、ありがとうございます。 – HelloWorld

答えて

3

それはsetIntervalのように見えますが、それは自分のコンテキストを作成します。試してみてください。

setInterval(this.nextSlide.bind(this), slideDuration); 
関連する問題