2009-10-19 80 views
5

今天,我唯一關於jQuery的緊迫問題是關於何時使用jQuery.extend()jQuery.fn(它用於插件)。羅勒高盛似乎在「Defining your own functions in jQuery」有一個解釋,但由於某種原因,我仍然不滿意,我有最好的信息。一旦我們開始與jQuery.fn合作,我們就必須考慮是否應該建立一個完整的插件。這意味着三個問題:擴展,添加新功能和構建插件。應該有一個解釋結合所有三個。這值得解釋嗎?我們有一個解釋嗎?jQuery:擴展,添加一個新功能並構建一個插件?

回答

7

我想你可能會覺得太辛苦。 :)

在jQuery的源 - 延伸()被定義一次並且在兩個命名空間中使用:

jQuery.extend = jQuery.fn.extend = function() { .. }; 

從技術上講,所有這些功能不是合併在一起的對象屬性。

所以在最基本的使用情況下,您只需合併兩個對象爲單一對象(很像插件選項參數):

this.options = $.extend({}, defaultOptions, userOptions); // Just mergin' objects 

平原上簡$ || jQuery的命名空間的擴展功能只是將該函數添加爲jquery名稱空間中類似靜態的函數。繼承jQuery名稱空間的函數通常是那些不需要元素進行操作的函數。這些函數就像isArray()和isFunction()以及更多。

var noWhiteSpace = $.trim(string); // No element needed 

jQuery.fn或多或少地保留用於執行基於傳遞到jquery對象的元素的動作的函數。這些就像普通的插件,以及你在jQuery中習慣的大多數東西。

$('div').css('border', '1px solid green'); // Do work on a set of elements 

更有趣的是,如果你看看jQuery源代碼中的$ .data()函數。它在兩個名稱空間中定義。它首先在$命名空間中定義,並將and元素作爲第一個參數。它稍後擴展到$ .fn,並簡單地將第一個參數設爲'this'。

希望這就是你要找的!

+0

我很感謝你的回答!我已經將YUI 2.x的遺留代碼移植到jQuery中(可能),所以我必須認爲「很難」;現在,當你有一堆「私有」支持時,需要構建一個插件功能爲「公共」擴展功能---對嗎? – rasx 2009-10-19 22:29:22

+0

這將是使用插件的原因,是的! – 2009-10-19 22:44:51