自動更新時のbind関数についてです。
下記のように自動更新の処理をオブジェクトの中にまとめて記述しました。
javaScript
1 /** 2 * 自動更新処理をまとめたobject 3 */ 4 var UpdateController = { 5 updateInterval: 10000,/** 更新間隔 */ 6 updateTimer: null,/** タイマーのID */ 7 updateProcess: function() { 8 /** 自動更新の内容 */ 9 clearTimeout(this.updateTimer); 10 this.startAutoUpdate(); 11 }, 12 startAutoUpdate: function() { 13 /** 自動更新の実行部分 */ 14 this.updateTimer = setTimeout(this.updateProcess.bind(this), this.updateInterval); 15 } 16 };
以前はthis.startAutoUpdate()の部分でエラーになっていました。
デバックをしてみたところ、thisの内容がwindowオブジェクトになっていました。
てっきり私はthisはUpdateControllerになるものと思っていました。
そこでsetTimeoutの部分を
setTimeout(this.updateProcess, this.updateInterval);
から、
setTimeout(this.updateProcess.bind(this), this.updateInterval);
に変更したところ、うまく処理を通すことができました。
なぜthis.startAutoUpdate()の部分のthisがwindowオブジェクトになってしまうのでしょうか?
setTimeoutの引数メソッドの部分にbind(this)を指定するとなぜうまくいくようになるのでしょうか?
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。