以下分析均採取沙箱模式 js (function (window) { //為了提高性能把需要的變數統一提前聲明 var arr = [], push = arr.push; //為區別jQuery,此文章以iQuery來定義封裝的函數 function iQuery( selector ) { r ...
以下分析均採取沙箱模式
(function (window) { //為了提高性能把需要的變數統一提前聲明 var arr = [], push = arr.push; //為區別jQuery,此文章以iQuery來定義封裝的函數 function iQuery( selector ) { return new iQuery.fn.init( selector ); } //為了方便把iQuery的原型定義為fn,併為原型添加兩個方法 iQuery.fn = iQuery.prototype = function () { constructor: iQuery, each: function ( callback ) { return iQuery.each( this, callback ); }, map: function ( callback ) { return iQuery.map( this, callback ); }, } //把所有的方法都掛載到iQuery上 iQuery.select = function (selector) { return slice.apply( document.querySelectorAll( selector ) ); }; iQuery.each = function ( arr, callBack ) { for ( var i = 0; i < arr.length; i++ ) { if ( arr.length >= 0 ) { if ( callBack.call( arr[i], i, arr[i] ) == false ) break; } else { for ( var k in arr ) { if ( callBack.call( arr[k], k, arr[k] ) == false ) break; } } } }; iQuery.map = function ( arr, callback ) { var rest = [], tmp, i; if ( arr.length >= 0 ) { for ( i = 0; i < arr.length; i++ ) { tmp = callback( arr[ i ], i ); if ( tmp != null ) { rest.push( tmp ); } } } else { for ( i in arr ) { tmp = callback( arr[ i ], i ); if ( tmp != null ) { rest.push( tmp ); } } } return rest; }; //init為構造函數,而且jQuery的巧妙之處就是iQuery和init公用一個原型,並且init是iQuery的一個成員 var init = iQuery.fn,init = function ( selector ) { push.apply( this, iQuery.select( selector ) ); } init.prototype = iQuery.fn; })(window)