版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_36282409/article/details/84098799
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>New Web Project</title>
<script type="text/javascript" charset="UTF-8">
/*
* 原型的另外一个作用就是扩展对象中的属性和方法:
* 1.模拟Array中each循环方法。
*
* 2.foreach
*
*/
//Array each方法
//ECMA5 forEach 循环遍历数组的每一项。
//var arr=[1,2,3,[4,5]];ECMA5只适合遍历一维数组。
/*
var arr=[1,2,3,4,5];
arr.forEach(function(item,index,array){
alert(item);
});
*/
//自己实现一个Array each方法,能遍历多维数组。
var arr = [1,2,3,[4,[5,[6]]]];//arr.length
Array.prototype.each=function(fn){
try{
//1.目的:遍历数组的每一项。
// var i = 0;//计算器,记录当前遍历的元素位置.
this.i || (this.i=0);
//2.严谨判断什么时候走each核心方法;
//当数组长度>0,并且传递的参数必须为函数.
if(this.length>0 && fn.constructor==Function){
//循环遍历数组的每一项
while(this.i<this.length){//遍历while循环的范围
//核心代码:获取数组的每一项
var e=this[this.i];
//如果当前元素获取到了,且当前元素是一个数组。
if(e && e.constructor==Array){
//直接做递归操作。
e.each(fn);
}else{
//如果不是数组(那就是一个单个元素)
//fn(e);
// var obj=true;
//fn.apply(obj,[e]);
//这个目的就是为了把数组的当前元素传递给fn函数,并让函数执行。
//fn.apply(e,[e]);//节省内存
fn.call(e,e);
}
this.i++;
}
this.i=null;//释放内存,垃圾回收机制回收变量
}
}catch(ex){
//do something
}
retrun this;
}
arr.each(function(item){
alert(item);
})
</script>
</head>
<body>
<h1>New Web Project Page</h1>
</body>