zl程序教程

您现在的位置是:首页 >  其他

当前栏目

javascriptforEach函数实现代码

代码 实现 函数
2023-06-13 09:14:15 时间
复制代码代码如下:

functionforEach(object,block,context,fn){
if(object==null)return;
if(!fn){
if(typeofobject=="function"&&object.call){
//遍历普通对象
fn=Function;
}elseif(typeofobject.forEach=="function"&&object.forEach!=arguments.callee){
//如果目标已经实现了forEach方法,则使用它自己的forEach方法(如标准游览器的Array对象)
object.forEach(block,context);
return;
}elseif(typeofobject.length=="number"){
//如果是类数组对象或IE的数组对象
_Array_forEach(object,block,context);
return;
}
}
_Function_forEach(fn||Object,object,block,context);
};
function_Array_forEach(array,block,context){
if(array==null)return;
vari=0,length=array.length;
if(typeofarray=="string"){
for(;i<length;i++){
block.call(context,array.charAt(i),i,array);
}
}else{
for(;i<length;i++){
block.call(context,array[i],i,array);
}
}
};
_Function_forEach=function(fn,object,block,context){
//这里的fn恒为Function
for(varkeyinobject){
//只遍历本地属性
if(object.hasOwnProperty(key)){
//相当于block(object[key],key)
block.call(context,object[key],key,object);
}
}
};

原作者的一些例子(我翻墙扒过来了!):
复制代码代码如下:

functionprint(el,index){
alert(index+":"+el)
}
forEach([1,2,3],print);
forEach({a:"aa",b:"bb",c:"cc"},print);
forEach("司徒正美",print);
forEach(document.styleSheets,function(el){
if(el.href)alert(el.href)
});



复制代码代码如下:
functionPerson(name,age){
this.name=name||"";
this.age=age||0;
};
Person.prototype=newPerson;
varfred=newPerson("Fred",38);
fred.language="English";//极晚绑定
fred.wife="Wilma";//极晚绑定
forEach(fred,print)