2011-04-30 121 views
2

我發現了一個擴展核心jQuery init函數的方法(這是在您使用$()或jQuery()函數時調用的函數)。這是不可能使用普通的代理模式,但下面的代碼使得它的工作:擴展jQuery核心的有用性

var origInit = jQuery.fn.init; 

jQuery.fn.init = function(selector, context, rootjQuery) { 
    if (some condition) { 
     //custom code here, possibly returning some other jQuery object than 
     //what jQuery would normally return 
    } 
    return origInit.call(jQuery.fn, selector, context, rootjQuery); 
} 

我的問題是在哪裏,這可能是有用的,因爲我意識到用它來選擇的緩存我最初的意圖是有問題的(因爲它會影響其他插件的行爲 - 我最終使用單獨的緩存功能)。

所以我想我會分享的方法,我也很好奇聽到其他想法的潛在用途。我想也許它可以用來支持某種類型的自定義選擇器,不過我不確定何時需要這樣做,因爲jQuery已經提供了很多選擇器。

回答

2

你會發現jQuery有一個圍繞這個概念構建的方法。

jQuery.sub()

這可以讓你沒有「腐敗」或「改變」全球jQuery對象本地擴展jQuery的。

從個人實驗中,我發現jQuery太複雜,無法處理各種令人討厭的邊緣情況下的init函數。圍繞jQuery對象創建工廠裝飾方法要好得多。

改變jQuery方法或構造函數有很多用途,從記錄到注入自定義邏輯,如將GUID寫入jQuery對象。

+0

感謝您的信息,這非常有趣 - 我從來不知道sub()函數。僅供參考,其文檔如下: http://api.jquery.com/jQuery.sub/ – 2011-04-30 15:29:53

+0

自1.7以來已棄用 – 2012-06-08 19:32:58