質問: new RandomComentSlider(); random.run(); ```
回答: はじめまして setTimeout, setIntervalの引数に渡す関数では、通常thisがグローバルオブジェクト(ブラウザならwindow)になります。 そのため、問題のケースだと`window.isReady`を取得しようとするため、設定されていなければundefinedとなります。 グローバル変数を設定するのは避けた方がよいので、別の方法を記します。 ``` // 省略 this.run = function() { // 省略 this.intervalTimer = setInterval(function(){ console.log(this.isReady); // window.isReadyとなる // 省略 }, 1000); } // 省略 ``` JavaScriptには、関数のthisを指定(束縛)した関数を生成するFunction.prototype.bind()メソッドがあります。 このメソッドで生成した関数を、setTimeoutやsetIntervalに引数として渡せば、任意の値をthisとして関数内部で使用できます。 ``` // 省略 this.run = function() { // 省略 this.intervalTimer = setInterval((function(){ console.log(this.isReady); // フラグの値 // 省略 }).bind(this /* 関数内で`this`として扱いたい値 */), 1000); } // 省略 ``` 解決策になれば幸いです。 参考資料 * https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval * https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/bind 追記 他の方と入れ違いで回答したみたいなので、 回答の違いを説明しておきます。 kei344さんの回答は、アロー関数を使用したものです。 通常のfunctionのthisは「functionが実行された文脈に合わせて決定される」のに対して、 アロー関数のthisは「functionが記述された文脈に合わせて決定される」ことを利用して、 thisがwindowにならないようにしています。 アロー関数は対応ブラウザの問題もあるので、適宜調べてみてください。