依讀了2周jQuery源碼的人感覺來說,完全理解jQuery,就拿jQuery 1.11這個(gè)版本10337行代碼來說,水平已經(jīng)很不錯(cuò)了。謙虛點(diǎn)說,已經(jīng)入門。驕傲點(diǎn),國內(nèi)領(lǐng)先水平。但其碼我感覺是js架構(gòu)之路起行的第一步,完全理解源碼,說明有獨(dú)立構(gòu)建或組織大型web前端框架的能力和基礎(chǔ)。然后看看完全理解jQuery是一個(gè)怎么樣的狀態(tài)。
創(chuàng)新互聯(lián)致力于網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,成都網(wǎng)站設(shè)計(jì),集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場(chǎng)競爭中脫穎而出。 選擇創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!
看下面幾個(gè)鏈接就明白了:
RubyLouvre/avalon · GitHub
artDialog
aui/artDialog · GitHub(后來的新版代碼有所改變)
沒錯(cuò),這兩個(gè)里邊,就是在繼承jquery的基礎(chǔ)上做了自己的創(chuàng)新嘗試。
然后在看下面這位:
[原創(chuàng)] jQuery1.6.1源碼分析系列(停止更新)
是唯一出過jquery源碼分析書的一位:
《jQuery技術(shù)內(nèi)幕:深入解析jQuery架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理》(高云)【摘要 書評(píng) 試讀】
然后在看這位:
jQuery 2.0.3 源碼分析系列
是目前一直在更新的一位,通俗有深度且版本比較新。
在說一下我2周閱讀jquery源碼的心得,初看源碼寫的惡心,再看寫的不錯(cuò),細(xì)看寫的真是精妙。然后今天在看ext 4.2的源碼,真是流暢易讀?;緛碚f,看懂jQuery源碼,以后的源碼學(xué)習(xí)之路可以說,平坦。
然后說是不是高手,高手只是一個(gè)自我定位的心理暗示,是一種人格魅力的體現(xiàn),是業(yè)務(wù)與技術(shù)的完美結(jié)合。個(gè)人感覺只能無限的接近,不能在有限的生命里邊到達(dá)。我們?cè)谕ㄍ康牡剡^程中享受一路的風(fēng)景,這才是生命的意義。
然后在說前端,前端的核心是js,外圍打醬油的技術(shù)太多,不一一列舉。
css就像一瓶酒,得品。
html,css總共就那些標(biāo)簽跟選擇器屬性什么的,但是要寫一個(gè)有擴(kuò)展性,健壯性或維護(hù)性的頁面不容易。現(xiàn)在寫頁面基本條件反射,不是如何快速的完成,而是思考如果有前端界面需求修改,怎么在修改代碼最少的情況下完成整體需求任務(wù)。
js就像一把劍,得磨。
js剛開始只是為了較驗(yàn),隨便技術(shù)社會(huì)的發(fā)展,承擔(dān)的角色越來越重,剛開始玩玩jQuery感覺已經(jīng)會(huì)js了,其實(shí)只是冰山一角。隨著對(duì)js的了解越來越多,他即變態(tài)又可愛,即好玩又難控,即有很多兼容問題,但解決兼容是我們基本生存之道。
人生就是一場(chǎng)夢(mèng),得作。
技術(shù)只是生活的一部分,曾經(jīng)雄心斗志,如今低頭寫碼。改變能改變的,接受不能改變的。人生有限,兄爭朝夕啊。
最后說,什么時(shí)候能閱讀jQuery源碼,我感覺其碼是純js編碼一年以上,js基礎(chǔ)知識(shí)沒有盲點(diǎn)。閱讀源碼,確實(shí)能學(xué)到很多東西。不只是技術(shù),而是一種生活的態(tài)度。一種把一件事情做到極致的態(tài)度
右擊頁面,點(diǎn)擊“查看元素”或“查看源碼”就可以查案網(wǎng)頁的html
一般scriptjuqery代碼/script標(biāo)簽包裹的就是寫在頁面上的jQuery代碼
另外還有寫在jQuery文件在頁面通過script src="jquery文件地址"/script這里的地址一般是相對(duì)地址,找到相應(yīng)的地址打開文件就可以了
復(fù)制代碼
代碼如下:
//
args
is
for
internal
usage
only
each:
function(
object,
callback,
args
)
{
var
name,
i
=
0,
length
=
object.length,
isObj
=
length
===
undefined
||
jQuery.isFunction(object);
if
(
args
)
{
if
(
isObj
)
{
for
(
name
in
object
)
{
if
(
callback.apply(
object[
name
],
args
)
===
false
)
{
break;
}
}
}
else
{
for
(
;
i
length;
)
{
if
(
callback.apply(
object[
i++
],
args
)
===
false
)
{
break;
}
}
}
//
A
special,
fast,
case
for
the
most
common
use
of
each
}
else
{
if
(
isObj
)
{
for
(
name
in
object
)
{
if
(
callback.call(
object[
name
],
name,
object[
name
]
)
===
false
)
{
break;
}
}
}
else
{
for
(
var
value
=
object[0];
i
length
callback.call(
value,
i,
value
)
!==
false;
value
=
object[++i]
)
{}
}
}
return
object;
},
分析:jquery文檔說
each(callback)作用是以每一個(gè)匹配的元素作為上下文來執(zhí)行一個(gè)函數(shù)。就是用each來遍歷數(shù)組,來執(zhí)行同一個(gè)方法
這個(gè)方法的實(shí)現(xiàn)最關(guān)鍵的是:call與apply的用法:call(apply)就是將函數(shù)的對(duì)象的從初始的上下文改為thisObj指向的對(duì)象,
就是說用thisObj來代替原來的對(duì)象來執(zhí)行方法:call與apply的第一個(gè)參數(shù)為this指向的對(duì)象,而后面的參數(shù)都下傳給函數(shù)的,
call傳給函數(shù)的參數(shù)用逗號(hào)分隔而apply則為一個(gè)數(shù)組。
//1.callback.apply(
object[
name
],
args
)
//2.callback.call(
object[
name
],
name,
object[
name
]
)