片方からもう片方に減らしましょう:
$.fn.myplugin = function () {
return $(this).each(function() {
return $(this).bind('click', function () {
console.log('Hi');
});
});
};
関数を開始するthis
と、jQueryオブジェクトであるため、$(this)
何も購入しません。簡単に次のようになります。
$.fn.myplugin = function () {
return this.each(function() {
return $(this).bind('click', function () {
console.log('Hi');
});
});
};
つまり、「jQueryオブジェクトの要素ごとに、jQueryオブジェクトを作成し、そのオブジェクトにイベントをバインドする」ということです。
を見るとbind
、が呼び出されon
、ロジックが実行され、最後に次の行が実行されます。
return this.each( function() {
jQuery.event.add( this, types, fn, data, selector );
});
つまり、そのjQueryオブジェクトのすべての要素にイベントが適用されるため、実際には次のようになります。
つまり、「jQueryオブジェクトの要素ごとに、jQueryオブジェクトを作成し、そのjQueryオブジェクトのすべての要素に対して、イベントをその要素にバインドする」ということです。
これで、2回ループします。1回はN
要素のリストで、次にN
1回は1つの要素のリストでループします。実際には、すべてを直接バインドできます。
$.fn.myplugin = function () {
return this.bind('click', function () {
console.log('Hi2');
});
};
そしてもちろん、それが最終的なコードです。