2010-04-22 37 views
4

我正在使用JavaScript進行動畫處理,並且我可以調用一些函數來將其添加到動畫隊列中。基本上,所有的這些功能看起來像這樣:將函數添加到功能隊列的樣板文件

function foo(arg1, arg2) { 
    _eventQueue.push(function() { 
     // actual logic 
    } 
} 

我現在想知道是否有可能以減少該樣板一點點,雖然如此,我並不需要額外的「_eventQueue」在每個功能體內排列數十次。例如,是否有可能創建一個以任意函數作爲參數的輔助函數,並返回一個新的函數,該函數將被自動添加到事件隊列中?唯一的問題是我需要找到一種方法來保持在這個過程中訪問函數的原始參數,這是複雜的。

回答

3

您正在尋找標識符arguments,它提供了一個類似數組的對象,其中包含傳遞給當前函數的參數。

例如:

function createEnqueuer(func) { 
    return function() { 
     var outerArgs = arguments; 

     _eventQueue.push(function() { 
      return func.apply(window, outerArgs); 
     }); 
    }; 
} 
+1

黨,打我給它。但是,我不確定我是否同意用'this'設置爲'window'來調用apply。儘管此代碼當前遵循現有的JavaScript約定(通過匹配當調用函數而不是方法時設置的「this」),但它提供的好處很少,並且可能會在EMCAScript 5中更改。如果我沒有弄錯,那麼'this'將被設置爲'undefined'。免責聲明:我不是這方面的專家;我只是偶然看到這個昨天:http://www.yuiblog.com/blog/2010/02/24/video-crockonjs-3/。 – 2010-04-22 19:44:04

+0

你可以通過調用'func.apply(this,outerArgs)'看到任何潛在的問題嗎? – s4y 2010-04-22 20:11:41

+0

真棒...這是如何工作的?我會假定參數數組將保存參數給createEnqueuer函數,而不是func函數。 – 2010-04-22 20:13:58