setInterval をエミュレートしようとしています:
var Animator=new (function(){
var jobs={
interval:{}
}
var self=this;
var assignedIntervalNum=0;
this.setInterval=function(func,interval){
jobs.interval[assignedIntervalNum]={
func:func,
latest:Date.now()-interval,
interval:interval
};
assignedIntervalNum++;
return assignedIntervalNum-1;
}
this.clearInterval=function(key){
delete jobs.interval[key];
}
var requestNextFrame=function(){
var now=Date.now();
for (var key in jobs.interval){
if (jobs.interval[key].latest + jobs.interval[key].interval < now){
jobs.interval[key].func();
jobs.interval[key].latest=now;
}
}
setTimeout(function(){requestNextFrame();},1);
}
requestNextFrame();
})();
しかし、jobs.interval[key] が定義されていないというエラーが表示され続けます。したがって、delete はそのプロパティを正確に削除するのではなく、単にundefined
!?に割り当てるだけだと思います。
ペアの削除と各ペアのループをサポートするキー/値ストレージのオプションは何ですか?
編集
悪い!
関数 func() で clearInterval の呼び出しがあったため、エラーの原因となった行は jobs.interval[key].latest=now; でした。削除直後です。
そうです、javascript オブジェクトは、ペアの削除とそれぞれのループをサポートするキー/値ストレージの優れたオプションです。