jQuery1.0源代碼分析之get方法(六)

 

為瞭寫起來方便,jQuery註冊到$上。為瞭不和其他框架沖突,他先備份瞭$到_$上。

 

 

// Map over the $ in case of overwrite 

if ( $ ) 

    jQuery._$ = $; 

 

// Map the jQuery namespace to the '$'one 

var $ = jQuery; 

下面是jQuery的原型方法

 

 

jQuery.fn = jQuery.prototype = { 

    jquery: "$Rev: 509 $";, 

 

    size: function() { 

        return this.length; 

    }, 

 

    get: function( num ) { 

        // Watch for when an array (of elements) is passed in 

        if ( num && num.constructor == Array ) { 

 

            // Use a tricky hack to make the jQuery object 

            // look and feel like an array 

            this.length = 0; 

            [].push.apply( this, num ); 

             

            return this; 

        } else 

            return num == undefined ? 

 

                // Return a 'clean' array 

                jQuery.map( this, function(a){ return a } ) : 

 

                // Return just the object 

                this[num]; 

    }, 

 

jquey:代表版本號,也是判斷一個對象是不是jquery的標志

size:返回jQuery對象的大小,jQuery對象是一個類數組對象,有length,可以索引下標,但是沒有數組方法。

 

get:get方法很靈活,參數可有可無。不帶參數返回一個jQuery對象數組;參數num為數字型,返回第num個元素;參數num為數組型,將num種的元素設置為jQuery對象元素。

 

 

代碼的亮點就在

 

 

this.length = 0; 

[].push.apply( this, num ); 

this代表jQuery實例對象,設置屬性length為0,然後用push方法,把num中的元素壓進來。

這兩句話缺一不可,這樣處理完成後,就是類數組對象瞭,有length屬性,可以迭代,但沒有數組方法。

 

相當於下面代碼:

 

 

var obj = new Object(); 

obj.length = 0; 

[].push.apply(obj, [1,2,3]); 

alert(obj.length); // 3   

 

 

作者 baozhifei

發佈留言