JavaScript で setInterval をラップする Timer クラスを書いてみました。(似たコードが大量に書かれてそうですが)
function Timer(obj, funcname){
this.interval = 1;
this._timer_id = null;
this._obj = obj;
this._funcname = funcname;
}
Timer.prototype.start = function(){
if(!this._timer_id){
var self = this;
this._timer_id = setInterval(function(){ self._obj[self._funcname](); }, this.interval);
}
}
Timer.prototype.stop = function(){
if(this._timer_id){
clearInterval(this._timer_id);
this._timer_id = null;
}
}
Timer.prototype.isRunning = function(){
return this._timer_id ? true : false;
}
というクラスで
var t = new Timer(obj, 'func'); t.start();
と書けます。
new Timer(obj.func) のように書きたかったのですが、どうしてもうまく動かすことができなかったため (obj.func 内の this が変なところを指してしまう)、このようなコンストラクタになってます。 うまい方法ないかなぁ。