首先要明确以下几点:
(1)只有一个forEach函数,所有要判断是数组还是对象,利用instanceof;
(2)遍历数组方法用forEach,遍历数组所有元素;
(3)遍历对象用for...in;
(4)要判断属性是否是obj原有属性,而不是通过继承得到的。
具体实现代码如下:
//forEach传入两个参数,obj,要执行的函数fn
function forEach(obj,fn){
//判断obj是否属于数组
if(obj instanceof Array){
//数组的forEach遍历方法,item代表成员,index代表成员在数组位置
obj.forEach(function(item,index){
fn(index,item);
})
}else{
//对象for...in遍历方法
for (key in obj){
//obj.hasOwnProperty(key)判断属性key是否是obj自己的属性,而不是继承的属性
if(obj.hasOwnProperty(key)){
fn(key,obj[key]);
}
}
}
}
var arr = [1,2,3];
forEach(arr,function(index,item){
console.log(index,item);
});
//0 1
//1 2
//2 3
var obj = {
x:100,
y:200
}
forEach(obj,function(key,val){
console.log(key,val);
})
//x 100
//y 200