Ext.util.DelayedTask類從名字上就可以看出它是延遲任務的執行。即指定時間之后執行任務。
整個類如下:
Ext.util.DelayedTask = function(fn, scope, args){ var me = this, id, call = function(){ clearInterval(id); id = null; fn.apply(scope, args || []); }; me.delay = function(delay, newFn, newScope, newArgs){ me.cancel(); fn = newFn || fn; scope = newScope || scope; args = newArgs || args; id = setInterval(call, delay); }; me.cancel = function(){ if(id){ clearInterval(id); id = null; } }; };
總體上看寫類方式是采用 構造函數方式 (將字段,方法都掛在內部this上)
當然這里this上沒掛字段,只掛了兩個方法delay和cancel。這里巧妙的使用setInterval和clearInterval而不是setTimeout。
DelayedTask 有三個參數,fn是需延遲執行的函數(必選,但可在delay時指定),scope是該函數執行時的上下文(可選),args是傳遞給該函數的參數(可選)。
delay方法的后三參數與DelayedTask構造器相同,第一個參數是需要延遲的時間數字,為毫秒。示例如下:
function fn(){ alert('test'); } var task = new Ext.util.DelayedTask(fn); task.delay(2000);
即在2秒后執行fn。這是最簡單的示例,復雜的可以指定fn的執行上下文,還可以傳參數。
這個類在 Ext.util.Event 類中私有函數createBuffered,createDelayed用到。而這兩個函數在Ext.util.Event的createListener方法中用到。
下一篇的 Ext.util.TaskRunner 將提供更為強大,多任務定時管理功能。