javascript增加Array的each方法 循环遍历多维数组

 

由于ECMA提供遍历数组的方法forEach()只能遍历一维数组,没有提供循环遍历多维数组的方法,所以我们自己来实现一个each()方法,来遍历多维数组。

<script charset=utf-8 type=text/javascript>

 

/*var arr = [1,2,3,[4,[5]]];

arr.forEach(function(item,index,arr){

alert(item);

});

*/

//模拟ECMA forEach  循环遍历多维数组

 

var arr = [1,2,3,[4,[5,[6,[7]]]]];

 

//使用原型,可以扩展对象的属性和方法

Array.prototype.each = function (fn){

try{

//计数器

this.i || (this.i=0);

//判断数组的长度必须大于0 && 传进来的必须是一个函数  才进行循环遍历操作

if(this.length > 0 && fn.constructor == Function){

while(this.i < this.length){

//获取数组的每一项

var e = this[this.i];

//如果取到了数组的每一项 && 该项仍为数组 则进行递归操作

if(e && e.constructor == Array){

e.each(fn);

}else{

//如果取到了数组的每一项 && 该项不为数组 则执行fn函数  打印出数组的每一项

fn.call(e,e);//不懂    (看下面讲解或者见链接)             http://www.cnblogs.com/snandy/archive/2012/03/01/2373243.html

}

//使i递增

this.i++;

}

//最后把i置为空,垃圾回收机制 回收

this.i = null;

}

}catch(ex){

 

}

//返回当前对象

return this;

}

//forEach()方法 的参数是一个函数  并且函数内有参数,这里我们就把函数内的参数设为一个

arr.each(function(item){

alert(item);

});

</script>

call和apply的第一个参数是null/undefined时函数内的的this指向window或global

call/apply用来改变函数的执行上下文(this),它们的第一个参数thisArg是个对象,即作为函数内的this。

多数时候你传啥函数内就是啥。仅以call示例

1
2
3
4
5
6
7
function  fun() {
     alert( this );
}
fun.call(1);
fun.call( 'a' );
fun.call( true );
fun.call({name: 'jack' });

 

分别弹出“1”、“a”、“true”、“[object Object]”。

有两种情况需要注意,传null或undefined时,将是JS执行环境的全局变量。浏览器中是window,其它环境(如node)则是global。

1
2
fun.call( null );  // window or global
fun.call(undefined);  // window or global

这在ECMAScript5.1 15.3.4.4中有解释,如下

 

严格模式下情况又有所不同,ES3比较宽容尽量去揣测代码意图。ES5严格模式(ie6/7/8/9除外)则不再揣测,给call/apply传入的任何参数不再转换。如下

1
2
3
4
5
6
'use strict'
function  fun() {
     alert( this );
}
fun.call( null )       // null
fun.call(undefined)  // undefined

 

须注意!

转载于:https://www.cnblogs.com/lctstruggle/p/4426338.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值