對Paul Irish的博客中第一次遇到的'duck punching'模式有疑問。我得到的一般前提是...保存一個現有函數的引用,然後用一個條件分支替換現有的函數,如果滿足條件將調用一個新函數,否則舊版本。我的問題是爲什麼當我們調用_old函數時,我們必須使用「apply」作爲第一個參數?我瞭解申請是如何運作的,但我正在尋找一些關於爲什麼有必要的澄清。Paul Irish'duck punching'pattern observation
(function($){
// store original reference to the method
var _old = $.fn.method;
$.fn.method = function(arg1,arg2){
if (... condition ...) {
return ....
} else { // do the default
return _old.apply(this,arguments);
}
};
})(jQuery);
我明白,我想我不明白'適用'與此作爲第一個參數有助於防止。如果我們做了類似於上面用鴨子代碼所描述的內容,'this','this'可能是窗口,那麼這個應用有什麼幫助? – mike 2011-05-01 14:17:17
嗯 - 不要試圖鈍,也許我只是需要更多的研究,但在鴨打碼的應用盲目地採取任何'這'目前設置。我不明白這與直接致電_old不同。也許這就是我錯過的。如果我直接打電話給_old,那麼'這個'總是與代碼傳遞'apply'的'this'一樣。那麼,什麼是使用點 – mike 2011-05-01 14:30:11
假設原來的$ .fn.method內部使用其他jQuery方法,這取決於此上下文。用全局上下文調用它會使其他方法無法使用。還有許多jQuery函數返回這個,所以鏈接是可能的。如果你返回錯誤的環境,鏈接將被打破。 – Rafael 2011-05-01 14:30:34