最近在看jquery組件的開發,關於extend與fn.extend之間的區別有些不理解,後來詳細的看了一下,作下記錄:jquery
一、靜態方法與實例方法spa
首先先了解靜態方法與實例方法這兩個的區別: prototype
一、靜態方法是指不須要聲明類的實例就能夠使用的方法。code
二、實例方法是指必需要先使用"new"關鍵字聲明一個類的實例, 而後才能夠經過此實例訪問的方法。對象
function staticClass() { }; //聲明一個類blog
staticClass.staticMethod = function() { alert("static method") }; //建立一個靜態方法
staticClass.prototype.instanceMethod = function() { "instance method" }; //建立一個實例方法開發
上面首先聲明瞭一個類staticClass, 接着爲其添加了一個靜態方法staticMethod 和一個動態方法instanceMethod。區別就在於添加動態方法要使用prototype原型屬性。原型
對於靜態方法能夠直接調用 staticClass.staticMethod();
可是動態方法不能直接調用 staticClass.instanceMethod(); //語句錯誤, 沒法運行。io
須要首先實例化後才能調用 var instance = new staticClass(); //首先實例化function
instance.instanceMethod(); //在實例上能夠調用實例方法
二、extend與fn.extend
簡單的來講,extend就是爲jquery對象添加了一個靜態方法,fn.jquery則添加了一個實例方法
$.extend({sayName:function(){}})
調用作個靜態方法,只須要$.sayName()便可
$.fn.extend({sayName:function(){}})
或者$.fn.sayName=function(){};
這種方法至關於爲jquey對象的原型添加方法,必需要實例化才能夠調用,$("div").sayName();
此外,extend方法還可用於組件開發中,默認參數的替換
function fn(option){ var option = jQuery.extend({ name1:value1; name2:value2; },options); }
這樣,沒有參數傳遞時,會採用默認值,有參數時,會採用傳遞的值