js---15,模拟数组的ecah方法

简介:

原型的另外一个作用就是扩展对象中的属性和方法的

复制代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
        <script type=text/javascript charset=utf-8>
        //原型的另外一个作用就是扩展对象中的属性和方法的

        // Array each方法
        // ECMA5 forEach 循环遍历数组的每一项(只适合遍历一维数组)
        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){//给数组的prototype增加一个静态方法,原型和数组对象可以用。prototype用来扩充所有对象的方法。
            try{
                //遍历数组的每一项 ,记录当前遍历的元素位置
                this.i || (this.i=0);  //局部临时变量最好加在对象上,不要写var i = 0;给数组加一个属性,this.i存在就用i不存在就是0,加一个属性并赋值,
                //数组长度大于0  && 传递的参数必须为函数
                if(this.length >0 && fn.constructor == Function){
                    while(this.i < this.length){    //不要for in循环,底层循环很多用for循环和while循环,索引不能到长度
                        var e = this[this.i];
                        //如果当前元素是一个数组(多维数组)
                        if(e && e.constructor == Array){//是一个数组的时候,通过constructor判断变量的类型,
                            //递归
                            e.each(fn);
                        } else {
                            //如果不是数组 (那就是一个单个元素)
                            //fn.apply(e,[e]);
                            fn.call(e,e);//fn(e)也可以,也可以fn.call(null,e);回调函数就是函数去执行数组的每一个元素。
                        }
                        this.i++ ;
                    }
                    this.i = null ; // while循环完了i就没用了,释放内存,垃圾回收机制回收变量
                }
                
            } catch(ex){
                // do something 
            }
            return this ;//谁将要调用这个方法,this就指向谁,现在是arr调用这个方法。
        }
        
        arr.each(function(item){//先去对象中找方法,然后去原型中找方法,
            alert(item);
        });
        </script>
    </head>
    <body>
    </body>
</html>
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/6868090.html,如需转载请自行联系原作者

相关文章
|
7天前
|
存储 JavaScript 索引
JS中数组的相关方法介绍
JS中数组的相关方法介绍
|
7天前
|
JavaScript Java
JS有趣的灵魂 清空数组
JS有趣的灵魂 清空数组
|
9天前
|
JavaScript 前端开发 容器
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
13 0
|
10天前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
1月前
|
JavaScript 前端开发 API
常用JavaScript 数组 API大全
常用JavaScript 数组 API大全
32 0
|
1月前
|
JavaScript 前端开发
解释 JavaScript 中的`map()`、`filter()`和`reduce()`方法的用途。
解释 JavaScript 中的`map()`、`filter()`和`reduce()`方法的用途。
17 1
|
7天前
|
JavaScript 前端开发 索引
JavaScript中与字符串相关的方法
JavaScript中与字符串相关的方法
|
1天前
|
JavaScript 前端开发
js绑定事件的方法
js绑定事件的方法
17 11
|
2天前
|
JavaScript
JS生成uuid的四种方法
JS生成uuid的四种方法
4 0
|
2天前
|
JavaScript 前端开发 iOS开发
js实用方法记录-动态加载css/js
js实用方法记录-动态加载css/js
9 0