天天看點

jquery.extend()與jquery.fn.extend()的差別

jquery為開發插件提拱了兩個方法,分别是:

javascript代碼

jquery.fn.extend(object);   

jquery.extend(object);   

jquery.extend(object); 為擴充jquery類本身.為類添加新的方法。

jquery.fn.extend(object);給jquery對象添加方法。

fn 是什麼東西呢。檢視jquery代碼,就不難發現。

 javascript代碼

jquery.fn = jquery.prototype = {      

   init: function( selector, context ) {//….    

   //……   

};   

原來 jquery.fn = jquery.prototype.對prototype肯定不會陌生啦。

雖然 javascript 沒有明确的類的概念,但是用類來了解它,會更友善。

jquery便是一個封裝得非常好的類,比如我們用 語句 $(“#btn1″) 會生成一個 jquery類的執行個體。

jquery.extend(object); 為jquery類添加添加類方法,可以了解為添加靜态方法。如:

 xml/html代碼

$.extend({   

  add:function(a,b){return a+b;}   

});   

便為 jquery 添加一個為 add 的 “靜态方法”,之後便可以在引入 jquery 的地方,使用這個方法了,

$.add(3,4); //return 7  

jquery.fn.extend(object);

對jquery.prototype進得擴充,就是為jquery類添加“成員函數”。jquery類的執行個體可以使用這個“成員函數”。

比如我們要開發一個插件,做一個特殊的編輯框,當它被點選時,便alert 目前編輯框裡的内容。可以這麼做:

$.fn.extend({        

alertwhileclick:function(){        

$(this).click(function(){        

alert($(this).val());        

});        

      }     

$(“#input1″).alertwhileclick(); //頁面上為:<input id=”input1″

type=”text”/>    

$(“#input1″) 為一個jquery執行個體,當它調用成員方法

alertwhileclick後,便實作了擴充,每次被點選時它會先彈出目前編輯裡的内容。

 真實的開發過程中,當然不會做這麼小白的插件,事實上jquery提拱了豐富的操作文檔,事件,css

,ajax、效果的方法,結合這些方法,便可以開發出更加 niubility 的插件。

注意:

在這裡還有一個特殊的地方,就是在函數開頭的地方有jquery.extend =

jquery.fn.extend,而在程式的前面已經将jquery.prototype指派給jquery.fn了,是以在後面的調用中會出現

jquery.extend()和jquery.fn.extend()的不同調用,這兩個方法調用産生的結果也不一樣,jquery.extend()

的調用并不會把方法擴充到對象的執行個體上,引用它的方法也需要通過jquery類來實作,如jquery.init(),而

jquery.fn.extend()的調用把方法擴充到了對象的prototype上,是以執行個體化一個jquery對象的時候,它就具有了這些方法,這

是很重要的,在jquery.js中到處展現這一點