我试图效仿的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 [关键]是不确定的。所以我想删除不会完全删除该属性,但只需将其分配给undefined
!?
对于支持删除对和循环每个对的键/值存储,我有哪些选择?
编辑
我的坏!
在函数func()中存在对clearInterval的调用,所以导致错误的行是jobs.interval [key] .latest = now;刚刚删除之后。
所以是的,JavaScript对象仍然是一个键/值存储,支持通过他们每个人的去除对和循环不错的选择
是的,它会删除该属性,但访问不存在的属性时会返回默认值undefined。 – 2013-03-03 22:28:20
'delete'确实从对象中删除属性。虽然访问一个未定义的属性默认为'undefined',但你可以通过使用'hasOwnProperty'方法或者'in'运算符来检查一个对象是否有一个属性(区别在于'in'也检查原型链属性...) – hugomg 2013-03-03 22:28:27