roppongi.jsに参加するたびに、もっとjavascript勉強しなきゃなーという気持ちになります。勉強会の内容メモは後で書きます。(2008/07/03追記しました。)
今回のroppongi.jsではeachメソッドについて勉強しました。
137:each
短いのでソースそのまま載せます。argsは内部でしか使われない引数で、この定義の中で使われているeachメソッドは別のeachのようです。
each: function( callback, args ) { return jQuery.each( this, callback, args ); }
724:each
上記で呼ばれているeachはここで定義されています。jQuery.extend()の引数として定義されていますが、理由はよくわかってません。少し長いですがこれも載せてしまいます。
each: function( object, callback, args ) { var name, i = 0, length = object.length; if ( args ) { if ( length == undefined ) { for ( name in object ) if ( callback.apply( object[ name ], args ) === false ) break; // *2 } else for ( ; i < length; ) if ( callback.apply( object[ i++ ], args ) === false ) break; // A special, fast, case for the most common use of each } else { if ( length == undefined ) { for ( name in object ) if ( callback.call( object[ name ], name, object[ name ] ) === false ) break; } else for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} // *1 } return object; }
argsのあるなし、objectが配列っぽいオブジェクトか否かで分岐します。
$(".hoge").each(function(){ //... })
のような場合は一番下の分岐(*1のところ)を通ります。戻り値はjQueryオブジェクト自身。
$(".hoge").each(function(){ //... })
例えば上記のコードの戻り値は
$(".hoge")
と同値になります。