关闭

实现jQuery.each方法

标签: javascriptjquery
211人阅读 评论(0) 收藏 举报
分类:

参考JavaScript专题之jQuery通用遍历方法each的实现

$.each是一个通用的迭代函数,可以用来迭代数组与对象。

$.each(arr,function(index,value){
    ……
})

$.each(obj,function(prop,value){
    ……
})

$.each()函数和 $(selector).each()是不一样的,那个是专门用来遍历一个jQuery对象。$.each()函数可用于迭代任何集合,无论是“名/值”对象或数组。

那么我们该怎么实现这样一个 each 方法呢?

首先,我们肯定要根据参数的类型进行判断,如果是数组,就调用 for 循环,如果是对象,就使用 for in 循环。

function each(obj,callback){
    if(Array.isArray(obj)){
        for(var i=0;i<obj.length;i++){
            callback.call(obj[i],i,obj[i]);
        }
    }else{
        for(var prop in obj){
            callbackcall(obj[prop],prop,obj[prop]);
        }
    }
}

使用call调用回调函数是为了保证this的正确指向。

这个函数看起来与原生的forEach方法没有什么区别,但是$.each是支持在回调函数中返回return false来终止循环的。
这里我们也可以通过监测callback返回的值来实现:

function each(obj,callback){
    if(Array.isArray(obj)){
        for(var i=0;i<obj.length;i++){
            if(callback(i,obj[i]) === false){
                break;
            }
        }
    }else{
        for(var prop in obj){
            if(callback(prop,obj[prop]) === false){
                break;
            }
        }
    }
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:54792次
    • 积分:2762
    • 等级:
    • 排名:第13142名
    • 原创:230篇
    • 转载:11篇
    • 译文:0篇
    • 评论:11条
    文章分类
    最新评论