在看過我們上期的技術文章之後,大家應該知道關於jq外掛程式的大概形式了。如果大家還沒有看過我的上一期文章,可以點下面鏈結
第一期:jq外掛程式編寫入門(1)
; (function ($, window, document, undefined) ;
/*這裡定義的是私有函式,供內部呼叫*/
function plugin(element, options) , defaults, options);
this._defaults = defaults;
this._name = pluginname;
this.init();
}plugin.prototype=,
otherfunc:function()
};/*這裡使用了$.fn方法來拓展外掛程式函式,當然也可以使用$.extend(),或者widget factory來達到相同的效果*/
$.fn.pluginname = function (options)
});};
})(jquery, window, document);
/*這裡定義的是私有變數,外部是訪問不到的*/
var pluginname = 'yourpluginname',
defaults = ;
這裡的寫法,大家可以學習一下。首先我們,只用了一次var變數宣告,這樣的好處是,不需要多次進行宣告,每個變數定義後,用逗號隔開,最後再以乙個分號結尾。其中我們把外掛程式名字pluginname存放在乙個變數裡面,這樣的好處是,我們瀏覽這個函式的開頭,就直接知道這個外掛程式的呼叫函式名字,而不需要拉到底部的$.fn.pluginname去檢視。雖然直接在那兒命名一點錯也沒有。但是大家要知道,往往我們開發,是需要接手別人的專案,那麼當乙個外掛程式,寫了幾百行的**,如果沒有清晰的結構,當別人接手我們專案維護時候,會很耗精力。
然後我們又宣告了乙個私有變數defaults,這個變數的作用是用來設定我們外掛程式的預設值。為什麼這個地方要使用物件來儲存我們的預設引數。我們都遇到過乙個情況:
function example(num,string)
我們常用的傳參是乙個個往裡面傳,那麼這個時候我們是要注意引數的順序的,當我們引數很多時候,我們不得不頭疼地記住每乙個引數的順序:
function example(num,string,obj,date,reg)
var ex=new example(num, , , ,reg);
這樣子穿引數,就很不方便。所以我們就把引數放到乙個物件裡面,這樣子,我們又可以不用注意引數的順序,又可以讓**結構更加清晰。我們傳引數,就直接寫物件的變數名字就好了。
var data=
function example(data)
/*這裡定義的是私有函式,供內部呼叫*/
function plugin(element, options) , defaults, options);
this._defaults = defaults;
this._name = pluginname;
this.init();
}plugin.prototype=,
otherfunc:function()
};/*外掛程式**後段的例項化
*組合起來看
* new plugin(this, options)
*/
這裡我們用了設計模式,具體關於設計模式我們就不展開去講。首先我們定義了乙個叫plugin的function,我們在裡面用this定義靜態變數和方法。
this.defaults = $.extend({}, defaults, options);
這段**的意思的是,把傳入的引數(就是使用者的自定義引數)與我們的預設值(預設引數值)合併到乙個物件裡面,同時不會修改defaults和options的值。
$.extend(defaults,options)
這樣子使用,那麼我們options的引數會合併到defaults裡面,defaults的預設值就被修改了。但很多時候,我們不希望defaults被修改,所以才用第一種方法。
$.extend(true/false,{},defaults,options)
這個方法的第乙個引數是可選的,true代表深轉殖,false代表淺轉殖,就是true的時候,會遞迴到陣列或者物件深處去合併。通常這個方法用在陣列或者物件上,如果只是一般的資料型別,我們有一種很簡單的方法實現預設值和自定義值的選擇。
var newstring = string || '';
var newnum = num ? num : 123;
當我們不需要處理陣列或者物件時候,我們就可以用上面兩種寫法,第一種是有字串string時候取string,沒有則取字串為空;第二種是有數字num時候取num,沒有則取乙個預設值數字123.
this.init();
初始化原型方法,當我們例項化這個函式時候,原型函式就執行
plugin.prototype = ,
otherfuc: function ()
}
這裡我們把函式的方法寫到原型裡面,當我們例項化的時候,就不需要每次new都把方法都複製一遍。所以,每個plugin的例項,用的方法都是呼叫原型裡面的,這樣可以較好地提公升效能。
/*這裡使用了$.fn方法來拓展外掛程式函式,當然也可以使用$.extend(),或者widget factory來達到相同的效果*/
$.fn.pluginname = function (options)
});};
終於到了我們外掛程式拓展的寫法了。當我們去看jq源**的時候,其實:
$.fn = $.prototype;
其實我們這種寫法就是在jquery的原型去拓展乙個方法。所以我們在平時使用的時候,就可以用$.pluginname的形式去呼叫方法。
return ...
為什麼這裡要return呢,因為當我們返回這個方法,我們可以對它鏈式呼叫。例如,$.pluginname1().pluginname2();
return this.each(function());
這裡的this,指的是$。在$.fn裡面,this是指向jquery物件。但是在this.each(function(){})裡的this,指的是function的每層迴圈的上下文,如果要用jquery物件,那麼就要用$
return this.each(function ()
});
在這個函式裡面,我們用if先判斷有沒有這個外掛程式方法,如果沒有,我們就new乙個例項,然後資料儲存到這個外掛程式裡面。在這裡我們用到$.data()方法。這個方法簡單點說,就是資料快取到某個元素上面。當我們不帶引數的時候,我們就是讀取;帶引數,就是鍵值對的設定。
$("p").data(); //undefined
$("p").data("a","hello"); //a=="hello"
$("p").data("b",);
$("p").data("b").first; //1
用法大概類似如此。
這期介紹了外掛程式的寫法,那麼下期,和大家分享一下自己寫的幾個外掛程式例項。
Python(入門案例)第二期
1.設計乙個貨幣單位換算程式 假定美元 人民幣匯率為 6.7744 1 1美元 6.7744元 tempstr input 請輸入帶有符號的貨幣值 10或者 10 判斷是否屬於美元,並執行轉換 if tempstr 0 in a float tempstr 1 6.7744 print 美元轉換為人...
第二期題目
1.請寫乙個擴充套件string的類mystring,加入乙個println 方法,你覺得用繼承string類的方法呢,然後加乙個println 方法簡單?還是在mystring內部建立乙個string物件進行擴充套件?2.類a的預設建構函式中,有這麼一句,system.out.println a ...
學習報告第二期
學習報告2020 7 30 學習報告 第二期 時間週期 7月1日 7月30日 姓名 專業 徐斌 電子資訊專碩 一.內容 1 基本掌握gpio的埠位配置和輸出模式位 2 通過跑馬燈庫函式實驗初步掌握1.使能io口時鐘 不同的io,呼叫的時鐘使能函式不一樣 2.初始化io口模式。呼叫gpio init函...