我試圖效仿的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