JavaScript_02面向对象程序设计(原型【四】)自己实现each方法可遍历多维数组

版权声明:本文为博主原创文章,未经博主允许不得转载。 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>

猜你喜欢

转载自blog.csdn.net/weixin_36282409/article/details/84098799