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] 未定义。所以我猜删除并没有完全删除该属性,而只是将其分配给undefined!?

对于支持删除对并循环遍历每个对的键/值存储,我有哪些选择?

编辑

我的错!

在函数 func() 中调用了 clearInterval,因此导致错误的行是 jobs.interval[key].latest=now; 就在它被删除之后。

所以,是的,javascript 对象仍然是键/值存储的好选择,支持删除对并循环遍历它们

4

2 回答 2

0

“删除”不会从数组中删除对象,它会将对象设置为未定义,这就是您收到该错误的原因。

如果要从索引为 i 的数组中删除对象,可以使用:

array.splice(i, 1);

其中 1 是要从位置 i 开始删除的元素数。

如果要通过键从数组“array”中删除一个元素,可以使用:

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

如问题所述,这是一个错误!

于 2013-03-03T23:15:15.187 回答