jQueryソース分析14--getとeqの違い

1678 ワード

getとeqの違い
.eq()           ,  index   ,        ,jquery  ~~
.get()       jQuery       DOM  

同じ戻り要素ですが、eqとgetの違いは何ですか?
eqはjQueryオブジェクトを返し,getはDOMオブジェクトを返す.例を挙げます.
$( "li" ).get( 0 ).css("color", "red"); //  
$( "li" ).eq( 0 ).css("color", "red"); //  

getメソッドは本質的にjQueryオブジェクトをDOMオブジェクトに変換しますが、cssはjQueryコンストラクタに属し、DOMはこのメソッドは存在しません.jQueryメソッドを使用する必要がある場合は、次のように書かなければなりません.
var li = $( "li" ).get( 0 );
$( li ).css("color", "red"); // $  

DOMオブジェクトliを取り出し、$で再パッケージしてjQueryオブジェクトに変換してこそcssメソッドを呼び出すことができ、2ステップに分けて書くのが面倒なので、jQueryは便利な方法eq()を提供してくれました.
eq()の実現原理は,上のコードでeqメソッドの内部をjQueryオブジェクトに変換することである.
eq: function( i ) {
    var len = this.length,
        j = +i + ( i < 0 ? len : 0 );//  ,  
    return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );

上の実装コードの論理はgetと同じであり,pushStackによって新しいjQueryオブジェクトが生成されるのとは異なる.
jQueryの考慮は行き届いており,eq法では新しいオブジェクトしか生成できないが,集約オブジェクトが必要であればどのように処理するのか.そのためjQueryはsliceの方法を提供しました.
構文:
.slice( start [, end ] )

機能:
指定した下付き範囲に基づいて、一致する要素の集合をフィルタし、新しいjQueryオブジェクトを生成します.
配列オブジェクトであるため、silceで直接値を取ることができることを意味します.このようにコードを書くことができます.
var arr = []
arr.push( this.slice(start[,end]) )     
this.pushStack(arr)

このthisはjQueryオブジェクトを指し,jQueryオブジェクトは配列集合であるため,原生のsilce法で直接集合数を取り,包装処理すればよい.
slice: function() {
    return this.pushStack( slice.apply( this, arguments ) );
},