zoukankan      html  css  js  c++  java
  • es5.js 通过扩展js的prototype 让不支持es5的浏览器支持es5函数 (扩展数组)

    扩展es5数组新增api

    数组新增了几个经典的遍历筛选等方法,非常方便。可以避免过渡使用for循环。通过javascript对象的原型扩展能提供一个统一的前端调用接口。

    代码如下:

    (function(_window){
        //数组新增某些方法
        //forEach方法从头到尾遍历数组,为每个数组元素调用指定函数并提供当前元素,当前索引与数组当做参数传给函数
        Array.prototype.forEach||(Array.prototype.forEach=function(fun){
            var length=this.length;
            for(var i=0;i<length;i++){
                fun(this[i],i,this);
            }
        })
        //map方法遍历数组并调用指定函数,最后返回一个数组,数组由所有函数返回值组成
        Array.prototype.map||(Array.prototype.map=function(fun){
            var length=this.length;
            var returnArray=[];
            for(var i=0;i<length;i++){
                returnArray.push(fun(this[i],i,this));
            }
            return returnArray;
        })
        //filter相当一个数组的帅选器,遍历数组并调用指定函数,并返回一个新数组,如果函数返回true则添加返回的数组。
        Array.prototype.filter||(Array.prototype.filter=function(fun){
            var length=this.length;
            var returnArray=[];
            for(var i=0;i<length;i++){
                if(fun(this[i],i,this)){
                    returnArray.push(this[i]);
                }
            }
            return returnArray;
        })
        //every 遍历数组调用指定函数,当所有函数都返回true 则every返回true否则返回false。
        Array.prototype.every||(Array.prototype.every=function(fun){
            var length=this.length;
            if(length==0) return true;
            //every应该尽早结束循环
            for(var i=0;i<length;i++){
                if(!fun(this[i],i,this)){
                    return false;
                }
            }
            return true;
        })
        //some 遍历数组调用指定函数,当有一个函数返回true就返回true,当所有函数都返回false就返回false
        Array.prototype.some||(Array.prototype.some=function(fun){
            var length=this.length;
            if(length==0) return false;
            //some应该尽早结束循环
            for(var i=0;i<length;i++){
                if(fun(this[i],i,this)){
                    return true;
                }
            }
            return false;
        })
        //reduce 遍历数组调用指定函数(函数需要2个参数),每次把调用函数的返回值与下一个元素当做函数参数继续调用。
        //对数组进行求和等操作很实用
        Array.prototype.reduce||(Array.prototype.reduce=function(fun,initval){
            var length=this.length;
            if(length==0) return "";
            if(length==1){
                return initval?fun(initval,this[0]):this[0];
            }
            var val=initval,
                firstindex=initval?0:2;
            if(!initval){
                val=fun(this[0],this[1]);            
            }
            for(var i=firstindex;i<length;i++){
                val=fun(val,this[i]);
            }
            return val;
        })
        //reduceRight 与reduce一样 只是从右到左遍历数组
        Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun,initval){
            var length=this.length;
            if(length==0) return "";
            if(length==1){
                return initval?fun(initval,this[0]):this[0];
            }
            var val=initval,
                firstindex=initval?length-1:length-3;
            if(!initval){
                val=fun(this[length-1],this[length-2]);    
            }
            for(var i=firstindex;i>=0;i--){
                val=fun(val,this[i]);
            }
            return val;
        })
        Array.prototype.indexOf||(Array.prototype.indexOf=function(val){
            var length=this.length;
            if(!length){
                return -1;
            }
            for(var i=0;i<length;i++){
                if(this[i]===val){
                    return i;
                }
            }
            return -1;
        })
        Array.prototype.lastIndexOf||(Array.prototype.lastIndexOf=function(val){
            var length=this.length;
            if(!length){
                return -1;
            }
            for(var i=length-1,k=0;i>=0;i--){
                k++;
                if(val===this[i]){
                    return k;
                }
            }
            return -1;
        })
        Array.prototype.isArray||(Array.prototype.isArray=function(){
            return Object.prototype.toString.call(this)==="[object Array]";
        })
    })(window);
  • 相关阅读:
    vim 学习笔记系列(前言)
    12306网站推出图片验证 反破解
    如何提升电脑的速度(五年时间收集各家精华,绝对史上最全)
    电脑维修和维护 毕业总结及经验报告
    留学生 电脑安全与维护手册 (留学须知)
    Progress数据库配置与应用
    润乾报表与DERBY数据库的创建连接详解
    图形报表部署在Linux下出现乱码解决办法
    sqlserver为数据库表增加自增字段
    五种常用web服务器jvm参数设置
  • 原文地址:https://www.cnblogs.com/xiaopi/p/3665072.html
Copyright © 2011-2022 走看看