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 が変なところを指してしまう)、このようなコンストラクタになってます。 うまい方法ないかなぁ。