-
jQuery插件的開(kāi)發(fā)分為兩種: 一種是掛在jQuery命名空間下的全局函數(shù),也可稱(chēng)為靜態(tài)方法; 另一種是jQuery對(duì)象級(jí)別的方法,即掛在jQuery原型下的方法,這樣通過(guò)選擇器獲取的jQuery對(duì)象實(shí)例也能共享該方法。查看全部
-
jQuery.prototype/jQuery.fn ——> Object Object.init——>function() function().prototype——>jQuery.fn 通過(guò)原型傳遞解決問(wèn)題,把jQuery的原型傳遞給jQuery.prototype.init.prototype。 換句話(huà)說(shuō)jQuery的原型對(duì)象覆蓋了init構(gòu)造器的原型對(duì)象,因?yàn)槭且脗鬟f所以不需要擔(dān)心這個(gè)循環(huán)引用的性能問(wèn)題。查看全部
-
ajQuery.fn = ajQuery.prototype = { name: 'aaron', init: function(selector) { this.selector = selector; return this; }, constructor: ajQuery } ajQuery.fn.init.prototype = ajQuery.fn 把jQuery.prototype原型的引用賦給jQuery.fn.init.prototype的原型,這樣就把2個(gè)構(gòu)造器的原型給關(guān)聯(lián)起來(lái)了。查看全部
-
var $$ = ajQuery = function(selector) { //把原型上的init作為構(gòu)造器 return new ajQuery.fn.init( selector ); } ajQuery.fn = ajQuery.prototype = { name: 'aaron', init: function() { console.log(this) }, constructor: ajQuery } 代碼解釋?zhuān)?init是ajQuery原型上作為構(gòu)造器的一個(gè)方法,那么其this指向的就不是ajQuery了,因此this完全引用不到ajQuery的原型了,所以這里通過(guò)new把init方法與ajQuery給分離成2個(gè)獨(dú)立的構(gòu)造器。查看全部
-
通過(guò)new操作符構(gòu)建一個(gè)對(duì)象,一般經(jīng)過(guò)四步: 1、創(chuàng)建一個(gè)新對(duì)象 2、將構(gòu)造函數(shù)的作用域賦給新對(duì)象,this就指向了這個(gè)新對(duì)象 3、執(zhí)行構(gòu)造函數(shù)中的代碼 4、返回這個(gè)新對(duì)象查看全部
-
jQuery對(duì)象的構(gòu)建從性能上考慮,使用原型結(jié)構(gòu),與ajQuery類(lèi)的結(jié)構(gòu)相比,jQuery類(lèi)的結(jié)構(gòu)存在不同之處: 1、沒(méi)有采用new操作符; 2、return返回的是一個(gè)通過(guò)new出來(lái)的的對(duì)象 。查看全部
-
var _jQuery = window.jQuery, _$ = window.$; jQuery.noConflict = function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; }; 代碼解釋?zhuān)?通過(guò)類(lèi)似swap交換的概念,先把之前的存在的命名空間給緩存起來(lái),通過(guò)對(duì)比當(dāng)前的命名空間達(dá)到交換的目的。 1、首先,先判斷下當(dāng)前的的$空間是不是被jQuery接管了,如果是則讓出控制權(quán)給之前的_$引用的庫(kù)。 2、如果傳入deep為true的話(huà)等于是把jQuery的控制權(quán)也讓出去了。查看全部
-
DOM文檔的加載步驟 (1) 解析HTML結(jié)構(gòu)。 (2) 加載外部腳本和樣式表文件。 (3) 解析并執(zhí)行腳本代碼。 (4) 構(gòu)造HTML DOM模型。//ready (5) 加載圖片等外部文件。 (6) 頁(yè)面加載完畢。//load查看全部
-
$(document).ready(function() { // ...代碼... }) $(document).load(function() { // ...代碼... }) ready先于load執(zhí)行查看全部
-
1、函數(shù)aQuery()內(nèi)部首先保證了必須是通過(guò)new操作符構(gòu)建,因此當(dāng)前構(gòu)建的是一個(gè)帶有this的實(shí)例對(duì)象。 2、既然是對(duì)象,就可以把所有的屬性與方法作為對(duì)象的key與value映射到this上,既可通過(guò)索引取值,也可以鏈?zhǔn)椒椒ㄈ≈怠?3、但是這樣的結(jié)構(gòu)是有很大的缺陷的,每次調(diào)用ajQuery方法等于是創(chuàng)建了一個(gè)新的實(shí)例,那么類(lèi)似get方法就要在每一個(gè)實(shí)例上重新創(chuàng)建一遍,性能就大打折扣,所以jQuery除了實(shí)現(xiàn)類(lèi)數(shù)組結(jié)構(gòu)、方法的原型共享,而且還實(shí)現(xiàn)方法的靜態(tài)與實(shí)例的共存。 示例代碼如下: var aQuery = function(selector) { //強(qiáng)制為對(duì)象 if (!(this instanceof aQuery)) { return new aQuery(selector); } var elem = document.getElementById(/[^#].*/.exec(selector)[0]); this.length = 1; this[0] = elem; this.context = document; this.selector = selector; this.get = function(num) { return this[num]; } return this; }查看全部
-
(function(window, undefined) { var jQuery = function() {} // ... window.jQuery = window.$ = jQuery; })(window); 寫(xiě)法優(yōu)勢(shì) 1、window和undefined都是為了減少變量查找所經(jīng)過(guò)的scope作用域。當(dāng)window通過(guò)傳遞給閉包內(nèi)部之后,在閉包內(nèi)部使用它的時(shí)候,可以把它當(dāng)成一個(gè)局部變量,顯然比原先在window scope下查找的時(shí)候要快一些。 2、undefined也是同樣的道理,其實(shí)這個(gè)undefined并不是JavaScript數(shù)據(jù)類(lèi)型的undefined,而是一個(gè)普普通通的變量名。只是因?yàn)闆](méi)給它傳遞值,它的值就是undefined,undefined并不是JavaScript的保留字。查看全部
-
1、jQuery使用()將匿名函數(shù)括起來(lái),然后后面再加一對(duì)小括號(hào)(包含參數(shù)列表),那么這小括號(hào)能把我們的表達(dá)式組合分塊,并且每一塊(也就是每一對(duì)小括號(hào)),都有一個(gè)返回值。 2、這個(gè)返回值實(shí)際上也就是小括號(hào)中表達(dá)式的返回值。所以,當(dāng)我們用一對(duì)小括號(hào)把匿名函數(shù)括起來(lái)的時(shí)候,實(shí)際上小括號(hào)返回的,就是一個(gè)匿名函數(shù)的Function對(duì)象。 3、因此,小括號(hào)對(duì)加上匿名函數(shù)就如同有名字的函數(shù)般被我們?nèi)〉盟囊梦恢昧?。所以如果在這個(gè)引用變量后面再加上參數(shù)列表,就會(huì)實(shí)現(xiàn)普通函數(shù)的調(diào)用形式。 示例代碼: function oClick3(){ ;(function(){ show('ajQuery3') })() }查看全部
-
jQuery接口的設(shè)計(jì)原理 業(yè)務(wù)邏輯是復(fù)雜多變的,jQuery的高層API數(shù)量非常多,而且也非常的細(xì)致,這樣做可以更友好的便于開(kāi)發(fā)者的操作,不需要必須在一個(gè)接口上重載太多的動(dòng)作。 Ajax的高層方法其實(shí)都是統(tǒng)一調(diào)用了一個(gè)靜態(tài)的jQuery.ajax方法。 在jQuery.ajax的內(nèi)部實(shí)現(xiàn)是非常復(fù)雜的,首先ajax要考慮異步的處理與回調(diào)的統(tǒng)一性,所以就引入了異步隊(duì)列模塊(Deferred)與回調(diào)模塊(Callbacks), 所以要把這些模塊方法在ajax方法內(nèi)部再次封裝成、構(gòu)建出一個(gè)新的jQXHR對(duì)象,針對(duì)參數(shù)的默認(rèn)處理,數(shù)據(jù)傳輸?shù)母袷交鹊取?查看全部
-
選擇器、DOM處理、事件、動(dòng)畫(huà)處理、AJAX查看全部
-
回調(diào)函數(shù)、異步加載、數(shù)據(jù)緩存、動(dòng)畫(huà)隊(duì)列查看全部
舉報(bào)
0/150
提交
取消