2016-09-11 18 views
0

これは重複しているように見えるかもしれませんが、ここには該当しません。 私はOOPのアプローチで簡単なスライダを作成しようとしています。 は、だからここに私がこれまで持っているものです:setInterval一度だけ起動する

function Slider(){ 
    this.totalSlides = 3; 
    this.sliderImagesRoot = 'images/slider/'; 
    this.imagesLinks = [this.sliderImagesRoot + '1.png',this.sliderImagesRoot + '2.png',this.sliderImagesRoot + '3.png']; 
    this.titles = ['State of the Art', 'Best staff kk', 'Toratos']; 
    this.descriptions = ['First description, bla bla bla', 'werewr','Toraki']; 
    this.slideDelay = 1200; 
    this.currSlide = 1; 

    this.initSlider = function(){ 
     var createSlide = this.createSlide(); 
     var sliding = setInterval(function(createSlide){ 
      createSlide(); 
     }, 500); 

    } 

    this.createSlide = function(){ 
      alert("er"); 
    } 
} 

私はそれを関数に渡すとは何か、任意のアイデアを持っていると思いますか? 私はJSでOOPを実装しようとするのは初めてです。

+0

'this.createSlide'は未定義です。 –

+0

可能な複製[これをウィンドウに渡す方法setInterval](http://stackoverflow.com/questions/10944004/how-to-pass-this-to-window-setinterval) – Xufox

+0

これは 'これ'ではありませんでしたそこにあることを意味し、私が試していたものの残り物でした。私はちょうどそれを編集した、これなしでそれを再読した。 –

答えて

1

オブジェクトの別のコンストラクタメソッド(コード内にinitSlider)を作成する必要はありません。関数Slider自体がコンストラクタです。

function Slider(){ 
    this.totalSlides = 3; 
    this.sliderImagesRoot = 'images/slider/'; 
    this.imagesLinks = [this.sliderImagesRoot + '1.png',this.sliderImagesRoot + '2.png',this.sliderImagesRoot + '3.png']; 
    this.titles = ['State of the Art', 'Best staff kk', 'Toratos']; 
    this.descriptions = ['First description, bla bla bla', 'werewr','Toraki']; 
    this.slideDelay = 1200; 
    this.currSlide = 1; 

    var createSlide = function(){ 
      alert("er"); 
    } 
    var sliding = setInterval(function(){ 
     createSlide(); 
    }, 500); 


} 

をして、あなたはこのようなオブジェクト構築することができます:このような何かを試してみてください

var slider = new Slider(); 
+0

私はそのevey変数rightからこれを削除すると思いますか? –

+1

@JoeVox必ずしもそうではありません。コンストラクタの外側からそれらの変数にアクセスできるようにするには、オブジェクトに 'this'を使ってそれらを格納する必要があります。したがって、本質的に 'this.totalSlides'は' totalSlides'をオブジェクトのパブリックメンバにしますが、 'var totalSlides'はそれをプライベートなものにします。 – redneb

1

がrednebからの答えはあなたが続行するために必要なものでなければなりませんが、私は何かを指摘したいと思いますそれ以外は参考になるかもしれません。代わりに同期して保持する必要があるすべては別々のリスト(linkstitlesdescriptions)と独立したカウンターの数に、このような単純な構造でデータを保存するために非常にクリーンになります:

var slides = [ 
    {linK: '1.png', title: 'State of the Art', desc: 'First description,...'}, 
    {link: '2.png', title: 'Best staff kk', desc: 'werewr'}, 
    {link: '3.png', title: 'Toratos',   desc: 'Toraki'} 
]; 

totalSlidesslides.lengthとし、linkプロパティを使用する場合は、sliderImagesRootの前に付けることができます。

+0

はい、このアプローチは、多くの点で、はるかに便利です、指摘のおかげで:) –

0

setIntervalコールバックが期待どおりに呼び出されますが、コールバック内で引数として渡された関数を呼び出そうとしていて、何も渡されていないため、未定義になります。あなたは、コードを実行した場合

、エラーメッセージが表示されるはずです。

TypeError: createSlide is not a function

関連する問題