0

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 オブジェクトは、ペアの削除とそれぞれのループをサポートするキー/値ストレージの優れたオプションです。

4

2 に答える 2

0

質問で述べたように、これは間違いでした!

于 2013-03-03T23:15:15.187 に答える
0

「削除」は配列からオブジェクトを削除せず、オブジェクトを未定義として設定するため、そのエラーが発生しています。

インデックス i を持つ配列からオブジェクトを削除する場合は、次を使用できます。

array.splice(i, 1);

ここで、1 は位置 i から削除する要素の数です。

キーで配列「array」から1つの要素を削除する場合は、次を使用できます。

for (var i=0; i<array.length; i++){
    if (array[i]==key){
        array.splice(i, 1);
        break;
    }
}
于 2013-03-03T22:42:59.297 に答える