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