jQueryソースを見てるjQueryeach()はとてもきれいに書かれています
1641 ワード
eachソース$('#img').each(callback); jqueryのeachメソッドはjqueryを呼び出す.fn.eachメソッド,$('img')はdom配列集合である.
参考になる書き方はいくつかあります.
1.配列と対象の違いは、配列にlengthがあり、対象がないに違いない、isFunctionで判断する.
2.argsは配列パラメータ、applyとcall区別呼び出し
3.callbackでfalseが返された場合、ループ操作を終了します.
4.objectはarrayと{}をサポートする
簡単なeachプログラムとテストを自分で書きます.
each: function( callback, args ) {
return jQuery.each( this, callback, args ); // this array
}
参考になる書き方はいくつかあります.
1.配列と対象の違いは、配列にlengthがあり、対象がないに違いない、isFunctionで判断する.
2.argsは配列パラメータ、applyとcall区別呼び出し
3.callbackでfalseが返された場合、ループ操作を終了します.
4.objectはarrayと{}をサポートする
each: function( object, callback, args ) {
var name, i = 0,
length = object.length,
isObj = length === undefined || jQuery.isFunction( object );
if ( args ) {
if ( isObj ) {
for ( name in object ) {
if ( callback.apply( object[ name ], args ) === false ) {
break;
}
}
} 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 ( isObj ) {
for ( name in object ) {
if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
break;
}
}
}
}
return object;
}
簡単なeachプログラムとテストを自分で書きます.
var f = function(obj, callback){
var name, i=0,
length = obj.length;
for(; i>" + i + "=" + a[i]);
for(name in a[i])
console.log(name + "=" + a[i][name])
})