Query開發插件的兩個方法
1.jQuery.extend(object);為擴展jQuery類本身.為類添加新的方法。
2.jQuery.fn.extend(object);給jQuery對象添加方法。
jQuery.fn
jQuery.fn = jQuery.prototype = { init: function(selector, context) { //內容 } }
2.jQuery.fn = jQuery.prototype。O(∩_∩)O哈哈~,對這個prototype(原型)不陌生了吧!!
3.雖然 JavaScript 沒有明確的類的概念,但是用類來理解它,會更方便。jQuery便是一個封裝得非常好的類,比如我們用 語句$("#div1")會生成一個 jQuery類的實例。
jQuery.extend(object)
為jQuery類添加類方法,可以理解為添加靜態方法。
栗子①
jQuery.extend({ min: function(a, b) { return a < b ? a : b; }, max: function(a, b) { return a > b ? a : b; } }); jQuery.min(2, 3); // 2 jQuery.max(4, 5); // 5
jQuery.fn.extend(object);
就是為jQuery類添加“成員函數”。jQuery類的實例才可以調用這個“成員函數”。
栗子②
比如我們要開發一個插件,做一個特殊的編輯框,當它被點擊時,便alert 當前編輯框里的內容。可以這么做:
$.fn.extend({ alertWhileClick: function() { $(this).click(function() { alert($(this).val()); }); } }); //$("#input1")是jQuery的實例,調用這個擴展方法 $("#input1").alertWhileClick();
jQuery.extend() 的調用並不會把方法擴展到對象的實例上,引用它的方法也需要通過jQuery類來實現,如jQuery.init()
jQuery.fn.extend()的調用把方法擴展到了對象的prototype上,所以實例化一個jQuery對象的時候,它就具有了這些方法,在jQuery.JS中到處體現這一點
jQuery.fn.extend = jQuery.prototype.extend
你可以拓展一個對象到jQuery的 prototype里去,這樣的話就是插件機制了。
栗子③
(function($) { $.fn.tooltip = function(options) {}; //等價於 var tooltip = { function(options) {} }; $.fn.extend(tooltip) = $.prototype.extend(tooltip) = $.fn.tooltip })(jQuery);
摘自:http://caibaojian.com/jquery-extend-and-jquery-fn-extend.html