jQuery原始碼分析隨筆

2022-03-06 08:56:09 字數 2497 閱讀 6271

一次在寫jquery外掛程式的經歷,讓自己發現了js水很深,自己很菜。然後慢慢發現js包括了原型、閉包、作用域等一些很常用的知識點。

首先jquery原始碼的主要結構

下面就是在做分析jquery原始碼時自己的一些備註

1 (function

(window)

78 jquery.test = function()

1112

var privatefunc = function ()

1617 jquery.fn = jquery.prototype =

24 _this.ele =document.documentelement.queryselectorall(select);

25 _this.length =_this.ele.length;

26return

_this;

27},

28 show: function

()32

for(var i=0;i

35 console.log('call show method')

36return

this;37

},38 hide: function

()42

for(var i=0;i

45 console.log('call hide method')

46return

this;47

},48 click: function

(),52 each: function

(fn)

56},

57 morefunc: function

()6061}

6263 jquery.fn.init.prototype = jquery.fn;

6465 window.jquery = jquery; //

將jquery賦值給window.jquery,全域性變數。這樣外部就可以直接訪問jquery函式了

6667 })(window,undefined)

下面我從自己一開始比較疑惑的幾個點進行分析

1、jquery 到底是什麼?

通常$('div')返回的是new jquery.fn.init( selector, context )這個物件,也就是init這個函式物件,這裡面會查詢div標籤的dom物件陣列、length還有jquery的例項方法。

2、jquery.fn和jquery的區別?

jquery.fn是個方法的集合,通過jquery.fn.init.prototype = jquery.fn,這樣jquery.fn.init就包含了jquery的所有例項方法,jquery.fn也就是jquery的所有例項方法。

jquery.fn.init.prototype==jquery.prototype==jquery.fn

3、jquery為什麼要呼叫jquery.fn.init來例項化?

jquery的初始化可以$('div')、new $('div')。為了能通過$('div')方便的進行初始化,就需要在構造方法中返回new jquery.fn.init(select)來巧妙的實現他。

jquery.fn.init剛好具備了jquery的所有的例項方法。

比如在jquery構造方法中直接return this或者new jquery(),很明顯這是沒辦法實現的。

4、存在的疑問

jquery.fn這個變數總是讓人很繞。如果直接換成jqueryfn不知道可不可以,也許是為了寫外掛程式時把jquery.prototype提供出去吧。

jquery.fn.plugin = plugin;

5、總結

首先建立乙個閉包,在裡面申請乙個變數jquery,然後掛載window下,讓閉包外的作用域也能進行訪問;

其次建立乙個jquery別名的jquery.fn=jquery.prototype,並將jquery.fn.init.prototype = jquery.fn;

最後$('.div')的方法返回new jquery.fn.init()的例項。這樣這個例項也擁有了jquery.fn的方法。

1 (function

(window, undefined)5//

方便後續我們初始化jquery物件時$('div')而不用new jquery('div')來初始化

6 jquery.fn.init.prototype =jquery.fn;

78 })(window)

jQuery原始碼分析

工具 版本說明 版本號備註 jquery 2.1.1 sublime 3jquery function selector,context jquery.fn jquery.prototype 快速匹配正則 不加g 不光匹配整體項還會匹配到子項 rquickexpr s w w w init jque...

jQuery原始碼分析

一 jquery如何做到不汙染變數名並暴露出 供使用者使用 jquery將變數和 寫進立即執行函式,通過函式來包裹所有的變數和方法,再在這個立即執行函式上將 jquery方法繫結到window上,就可以讓使用者使用到jq方法了。二 jquery是如何做到 jquery 的?function wind...

jQuery 原始碼分析

這篇文章可以說是讀這篇文章這篇文章後的總結。jquery最基本的構成結構 var jquery window.jquery window.function a,b jquery.fn jquery.prototype age function jquery.fn.init.prototype jqu...