+ -
当前位置:首页 → 问答吧 → jquery中each实现的困惑

jquery中each实现的困惑

时间:2011-12-01

来源:互联网

在jquery中,$.each()在使用时的用法为:
JScript code

$.each(map, function(key, value) { 
  alert(key + ': ' + value); 
});


也就是说callback的参数第一个是key,第二个是value,但是在jquery的源码中,我发现:
jQuery.extend中的each实现为:
callback.call( object[ i ], i, object[ i++ ] )
整体代码如下所示,求助:
JScript code

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;
    },

作者: Stargaga   发布时间: 2011-12-01

你要先搞明白.call的用法
第一个参数是调用方法的对象,所以你的callback里可以用this
第二个参数i才是你callback的第一个参数,也就是索引
第三个参数就不用说了

作者: ifandui   发布时间: 2011-12-01

相关阅读 更多