2012-04-12 3 views
1

私はとの違いを知りたい:jQuery.mapで「この」キーワード()

$('a').map(function(){return this}) 
$.map($('a'), function(){return this}) 

私はfirebugコンソールでそれらをテストするとき、彼らは動作が異なります。

+0

どのように彼らは異なる動作をしていますか? – Brandan

答えて

4

でコレクションを反復処理するとき、彼らは異なって実行するのですwindowオブジェクトを指しながら。後者の文脈における 'これ'はウィンドウオブジェクトを参照する。しかし、あなたは、渡されたオブジェクト/配列をループするときに、現在の要素のアクセス権を持っています:前者は、この目的のためのものであるのに対し、

$('a').map(function(){ 
    return this 
}); 
$.map($('a'), function(el){ 
    return el; 
}); 

を後者は、典型的には、非jQueryのオブジェクトと配列のために使用されます。

は、より多くの情報のためのドキュメントを参照してください:

http://api.jquery.com/map/

http://api.jquery.com/jQuery.map/

2

そこには違いはありません、私は

$('a').map(function(){return this}) 

が、これはjQueryのソースコード

map: function(callback) { 
    return this.pushStack(jQuery.map(this, function(elem, i) { 
     return callback.call(elem, i, elem); 
    })); 
}, 

EDITで実際に

$.map($('a'), function(){return this}) 

のラッパーであることを考える - もちろん(私はそれを与えました)thisは、.map()コレクションにそれはあなただけで簡単にテストした$.map()

関連する問題