2.最基本的jQuery外掛編寫方式
開始寫外掛,當然是要先建立一個外掛了,而我使用了最簡單的一種方式來建立,程式碼如下:
;
(function ($) {
$.fn.quantity = function (opt) {
};
}(jQuery));
我給外掛取的名稱是quantity,那麼使用的時候就會變成這樣子:
$('#id').quantity({});
$.fn是什麼一個東西?
$.fn是指jquery的名稱空間,可以想像成這樣子:
var a = {}; //名稱空間
var $ = {}; //名稱空間
$.fn = {};
$.fn.quantity = function () {
};
a.quantity = function () {
};
當然我們把他想像成一個名稱空間的時候,這不是真的,只是來幫助理解。那麼在名稱空間上面增加一個屬性,而這個屬性的值是一個function,就比較好理解了。
為什麼可以$.fn.pluginName這樣子用呢?
來看jQuery的原始碼:
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {//....
};
這樣子很容易看出來jQuery是一個建構函式,我們增加外掛就是在他的原型連結,多加一點東西而已。看到原始碼,那麼我們是不是還可以像這樣子寫呢?
;
(function ($) {
$.prototype.quantity = function (opt) {
console.log(1);
};
}(jQuery));
$('#id').quantity({});
為什麼要把jQuery當引數傳進去
這樣子可以保證在函式內部,確定肯定一定是jQuery。如果不是這樣子,萬一別的js也是$作為變數名了,那就玩不下去了。
var $ = 1;
(function () {
//TypeError: Cannot set property 'quantity' of undefined
$.prototype.quantity = function (opt) {
console.log(1);
};
}());
$('#id').quantity({});
最前面為什麼要加一個分號呢?
還是為了防止意想不到的情況。這個情況是這樣子的。
//不知道是哪個傢伙寫的
var foo = function(){
alert('foo');
};
foo
//後面寫的一個外掛
;(function ($) {
$.prototype.quantity = function (opt) {
alert('外掛!')
};
}(jQuery));
$('#id').quantity({});
如果掉了那個分號,那麼foo這個函式就在意想不到的情況下執行了,如果專案中出現這樣子的情況,排查問題也是很困難的,因此還是乖乖的打上一個分號吧!
opt是幹嘛用的?
opt實際是options這個單詞的綜寫,在這裡,他的作用就是傳引數,這個引數通過物件的形式傳進去。
推薦用物件傳參肯定有他的好處的。
1.傳參的時候和位置無關。
2.其中某個引數想傳就傳,不想傳就不傳。
3.傳多個引數的時候優勢更大。
function foo1(name, age, sex, addr, qq, qq) {
console.log('name:'+ name);
console.log('age:'+ age);
console.log('sex:'+ sex);
console.log('addr:'+ addr);
console.log('qq:'+ qq);
console.log('mail:'+ qq);
}
function foo2(opt) {
console.log('name:' + opt.name);
console.log('age:') + opt.age;
console.log('sex:') + opt.sex;
console.log('addr:' + opt.addr);
console.log('qq:' + opt.qq);
console.log('mail:' + opt.mail);
}
foo1('kyo', 18, '男', '藍天下西湖邊斷橋上', 12345, '12345@abc.com');
foo2({
name: 'kyo',
age: 18,
sex: '男',
addr: '藍天下西湖邊斷橋上',
qq: 12345,
mail: '12345@abc.com'
});
我們發現,如果foo1這個函式,當我不想傳sex的時候,是不是覺得很無力,一定在那個位置加上一個表示式呢?
foo1('kyo', 18, '藍天下西湖邊斷橋上', 12345, '12345@abc.com');
這就是一個坑,你不想佔都不行,不然函式體內部的變數名就對應不上了。
相關文章
- 編寫最基本的Gradle外掛Gradle
- 編寫jquery常用外掛的基本格式jQuery
- 如何編寫一個Jquery外掛jQuery
- 編寫基於jQuery的外掛的方法jQuery
- 編寫優秀 jQuery 外掛的10個技巧jQuery
- 編寫優秀jQuery外掛的10個技巧jQuery
- jquery外掛寫法jQuery
- 編寫最基本的APT DemoAPT
- jquery寫的ajax分頁外掛jQuery
- 編寫node 外掛
- 編寫jq外掛
- 鋒利的jQuery-7--編寫外掛基礎知識jQuery
- 編寫Ansj的Solr外掛Solr
- 手寫jquery.cookie外掛jQueryCookie
- egg外掛編寫
- Phonegap外掛編寫
- 編寫自己的Babel外掛(一)Babel
- jQuery外掛編寫及鏈式程式設計模型小結jQuery程式設計模型
- eggjs外掛編寫JS
- 如何編寫 ProtoBuf 外掛 (一) ?
- 如何編寫 ProtoBuf 外掛 (二) ?
- 如何編寫 ProtoBuf 外掛 (三) ?
- vue外掛編寫小記Vue
- jQuery外掛jQuery
- jQuery的外掛列表jQuery
- Go - 如何編寫 ProtoBuf 外掛 (三) ?Go
- Go - 如何編寫 ProtoBuf 外掛(二)?Go
- Go - 如何編寫 ProtoBuf 外掛 (一) ?Go
- Vue 外掛編寫與實戰Vue
- 如何編寫Node.js外掛Node.js
- 編寫一個簡單的babel外掛Babel
- jquery 外掛站jQuery
- flutter外掛編寫及釋出流程Flutter
- Flutter 外掛編寫必知必會Flutter
- 如何使用Python編寫vim外掛Python
- phpstorm編寫程式碼特效外掛PHPORM特效
- pual_bot 天氣外掛編寫
- 自己動手編寫一個Mybatis外掛:Mybatis脫敏外掛MyBatis