通過jQuery源碼學(xué)習(xí)javascript(三)
更新時間:2012年12月27日 16:13:22 作者:
承接上兩篇繼續(xù)寫下去。我盡量把我明白的地方給大家說清楚。有些大家的提問我也有點搞不明白,如果有人能解答,再好不過了
疑問
第一篇中有位博友提出了以下的問題,我也不太明白,如果有明白的,能否告知一、二。
var str = "test";
for(var a in str){
console.log(a + ":" + str[ a ]);
}
輸出結(jié)果
這是一個字符串對象,在使用for的時候,會出現(xiàn)上面的情況。
(function(window, undefined){
// jquery code
})(window);
代碼解析:
第一個括號:創(chuàng)建一個匿名函數(shù)。
第二個括號:立即執(zhí)行。
傳入window變量原因:
使window變量由全局變量變?yōu)榫植孔兞浚恍枰獙⒆饔糜蜴溁赝说巾攲幼饔糜?,以便更快的訪問window。
在參數(shù)列表中增加undefined原因:
在自調(diào)用匿名函數(shù)的作用域內(nèi),確保undefined是真的未定義。
這樣設(shè)計的好處:
創(chuàng)建私有命名空間。函數(shù)體內(nèi)的變量和方法,不會影響全局空間。不會與其他程序的變量發(fā)生沖突。
功能擴展extend()
根據(jù)一般的設(shè)計習(xí)慣,可以直接通過點(.)語法實現(xiàn),或者在prototype對象結(jié)構(gòu)中增加一個屬性即可?!猨Query框架是通過extend()函數(shù)來實現(xiàn)功能擴展的。
我們也做個類似的方法?!阎付▍?shù)對象包含的所有屬性復(fù)制給cQuery或cQuery.prototype對象。
(function(){
var
_cQuery = window.cQuery,
cQuery = function(){
return new cQuery.fn.init();
};
cQuery.fn = cQuery.prototype = {
init : function () {
return this;
}
};
cQuery.fn.init.prototype = cQuery.fn;
cQuery.extend = cQuery.fn.extend = function( obj ) {
for (var prop in obj) {
this[ prop ] = obj[ prop ];
}
return this;
}
cQuery.fn.extend({
test : function() {
console.log('測試!');
}
});
window.C = window.cQuery = cQuery;
})();
// 調(diào)用方式
C().test();
好處:
1、方便用戶快速擴展jQuery框架的功能,不會破壞jQuery框架的原型結(jié)構(gòu)。
2、方便管理。
注意:
通過prototype擴展的對象,我們必須通過實例化函數(shù)來調(diào)用(如cQuery().test(),而不能使用cQuery.test())
對象url參數(shù)化param()
(function(){
var
_cQuery = window.cQuery,
cQuery = function(){
return new cQuery.fn.init();
};
cQuery.fn = cQuery.prototype = {
init : function () {
return this;
}
};
cQuery.param = function(obj) {
var prefix, s = [];
for ( prefix in obj ) {
s[ s.length ] = encodeURIComponent( prefix ) + "=" + encodeURIComponent( obj[ prefix ]);
}
return s.join( "&" );
}
cQuery.fn.init.prototype = cQuery.fn;
window.C = window.cQuery = cQuery;
})();
var param = cQuery.param({"name":"chuanshanjia", "age":30});
console.log( param );
輸出結(jié)果
總結(jié)
暫時寫到這里,如果大家有所補充,那最好不過了。——大家多交流互相學(xué)習(xí)下。
第一篇中有位博友提出了以下的問題,我也不太明白,如果有明白的,能否告知一、二。
復(fù)制代碼 代碼如下:
var str = "test";
for(var a in str){
console.log(a + ":" + str[ a ]);
}
輸出結(jié)果
這是一個字符串對象,在使用for的時候,會出現(xiàn)上面的情況。
復(fù)制代碼 代碼如下:
(function(window, undefined){
// jquery code
})(window);
代碼解析:
第一個括號:創(chuàng)建一個匿名函數(shù)。
第二個括號:立即執(zhí)行。
傳入window變量原因:
使window變量由全局變量變?yōu)榫植孔兞浚恍枰獙⒆饔糜蜴溁赝说巾攲幼饔糜?,以便更快的訪問window。
在參數(shù)列表中增加undefined原因:
在自調(diào)用匿名函數(shù)的作用域內(nèi),確保undefined是真的未定義。
這樣設(shè)計的好處:
創(chuàng)建私有命名空間。函數(shù)體內(nèi)的變量和方法,不會影響全局空間。不會與其他程序的變量發(fā)生沖突。
功能擴展extend()
根據(jù)一般的設(shè)計習(xí)慣,可以直接通過點(.)語法實現(xiàn),或者在prototype對象結(jié)構(gòu)中增加一個屬性即可?!猨Query框架是通過extend()函數(shù)來實現(xiàn)功能擴展的。
我們也做個類似的方法?!阎付▍?shù)對象包含的所有屬性復(fù)制給cQuery或cQuery.prototype對象。
復(fù)制代碼 代碼如下:
(function(){
var
_cQuery = window.cQuery,
cQuery = function(){
return new cQuery.fn.init();
};
cQuery.fn = cQuery.prototype = {
init : function () {
return this;
}
};
cQuery.fn.init.prototype = cQuery.fn;
cQuery.extend = cQuery.fn.extend = function( obj ) {
for (var prop in obj) {
this[ prop ] = obj[ prop ];
}
return this;
}
cQuery.fn.extend({
test : function() {
console.log('測試!');
}
});
window.C = window.cQuery = cQuery;
})();
// 調(diào)用方式
C().test();
好處:
1、方便用戶快速擴展jQuery框架的功能,不會破壞jQuery框架的原型結(jié)構(gòu)。
2、方便管理。
注意:
通過prototype擴展的對象,我們必須通過實例化函數(shù)來調(diào)用(如cQuery().test(),而不能使用cQuery.test())
對象url參數(shù)化param()
復(fù)制代碼 代碼如下:
(function(){
var
_cQuery = window.cQuery,
cQuery = function(){
return new cQuery.fn.init();
};
cQuery.fn = cQuery.prototype = {
init : function () {
return this;
}
};
cQuery.param = function(obj) {
var prefix, s = [];
for ( prefix in obj ) {
s[ s.length ] = encodeURIComponent( prefix ) + "=" + encodeURIComponent( obj[ prefix ]);
}
return s.join( "&" );
}
cQuery.fn.init.prototype = cQuery.fn;
window.C = window.cQuery = cQuery;
})();
var param = cQuery.param({"name":"chuanshanjia", "age":30});
console.log( param );
輸出結(jié)果
總結(jié)
暫時寫到這里,如果大家有所補充,那最好不過了。——大家多交流互相學(xué)習(xí)下。
您可能感興趣的文章:
- jQuery源碼解讀之a(chǎn)ddClass()方法分析
- jQuery源碼解讀之hasClass()方法分析
- jQuery源碼解讀之removeAttr()方法分析
- jQuery源碼分析之jQuery.fn.each與jQuery.each用法
- 從JQuery源碼分析JavaScript函數(shù)的apply方法與call方法
- jQuery源碼分析之jQuery中的循環(huán)技巧詳解
- 通過jQuery源碼學(xué)習(xí)javascript(二)
- jQuery中removeClass()方法用法實例
- 使用JS實現(xiàn)jQuery的addClass, removeClass, hasClass函數(shù)功能
- jQuery源碼解讀之removeClass()方法分析
相關(guān)文章
jQuery實現(xiàn)對網(wǎng)頁節(jié)點的增刪改查功能示例
這篇文章主要介紹了jQuery實現(xiàn)對網(wǎng)頁節(jié)點的增刪改查功能,涉及jQuery針對網(wǎng)頁DOM節(jié)點的獲取、屬性修改等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09頁面加載完成后再執(zhí)行JS的jquery寫法以及區(qū)別說明
本篇文章主要是對頁面加載完成后再執(zhí)行JS的jquery寫法以及區(qū)別進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-02-02基于jquery實現(xiàn)滾輪放大縮小圖片的函數(shù)代碼
這篇文章主要介紹了基于jquery實現(xiàn)滾輪放大縮小圖片的函數(shù)代碼,需要的朋友可以參考下2023-05-05php+ajax+jquery實現(xiàn)點擊加載更多內(nèi)容
本文給大家詳細講解的是如何利用jquery.more.js實現(xiàn)點擊加載更多后在本頁面內(nèi)下面加載數(shù)據(jù),十分的實用,有需要的小伙伴可以參考下。2015-05-05jquery 學(xué)習(xí)筆記 傳智博客佟老師附詳細注釋
本人水平有限,在學(xué)習(xí)時請用批判的態(tài)度學(xué)習(xí),有問題給我留言 傳智博客佟老師 jqurey 學(xué)習(xí)筆記,以及例子代碼詳細注釋。2009-07-07jquery3和layui沖突導(dǎo)致使用layui.layer.full彈出全屏iframe窗口時高度152px問題
這篇文章主要介紹了解決jquery3和layui沖突導(dǎo)致使用layui.layer.full彈出全屏iframe窗口時高度152px問題,需要的朋友可以參考下2019-05-05