实现jQuery.each方法

来源:互联网 发布:手机淘宝购买成功截图 编辑:程序博客网 时间:2024/06/05 23:49

参考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;            }        }    }}