html5.js 通过扩展js的prototype 让不支持html5的浏览器支持html5函数 (持续新增)

扩展es5数组新增api

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

代码如下:

html5.js 通过扩展js的prototype 让不支持html5的浏览器支持html5函数 (持续新增)
(function(_window){
    //数组新增某些方法
    //forEach方法从头到尾遍历数组,为每个数组元素调用指定函数并提供当前元素,当前索引与数组当做参数传给函数
    Array.prototype.forEach||(Array.prototype.forEach=function(fun){
        for(var i=0;i<this.length;i++){
            fun(this[i],i,this);
        }
    })
    //map方法遍历数组并调用指定函数,最后返回一个数组,数组由所有函数返回值组成
    Array.prototype.map||(Array.prototype.map=function(fun){
        var returnArray=[];
        for(var i=0;i<this.length;i++){
            returnArray.push(fun(this[i],i,this));
        }
        return returnArray;
    })
    //filter相当一个数组的帅选器,遍历数组并调用指定函数,并返回一个新数组,如果函数返回true则添加返回的数组。
    Array.prototype.filter||(Array.prototype.filter=function(fun){
        var returnArray=[];
        for(var i=0;i<this.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){
        if(this.length==0) return true;
        //every应该尽早结束循环
        for(var i=0;i<this.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){
        if(this.length==0) return false;
        //some应该尽早结束循环
        for(var i=0;i<this.length;i++){
            if(fun(this[i],i,this)){
                return true;
            }
        }
        return false;
    })
    //reduce 遍历数组调用指定函数(函数需要2个参数),每次把调用函数的返回值与下一个元素当做函数参数继续调用。
    //对数组进行求和等操作很实用
    Array.prototype.reduce||(Array.prototype.reduce=function(fun,initval){
        if(this.length==0) return "";
        if(this.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<this.length;i++){
            val=fun(val,this[i]);
        }
        return val;
    })
    //reduceRight 与reduce一样 只是从右到左遍历数组
    Array.prototype.reduceRight||(Array.prototype.reduceRight=function(fun,initval){
        if(this.length==0) return "";
        if(this.length==1){
            return initval?fun(initval,this[0]):this[0];
        }
        var val=initval,
            firstindex=initval?this.length-1:this.length-3;
        if(!initval){
            val=fun(this[this.length-1],this[this.length-2]);    
        }
        for(var i=firstindex;i>=0;i--){
            val=fun(val,this[i]);
        }
        return val;
    })
})(window);
html5.js 通过扩展js的prototype 让不支持html5的浏览器支持html5函数 (持续新增)

 

html5.js 通过扩展js的prototype 让不支持html5的浏览器支持html5函数 (持续新增),布布扣,bubuko.com

html5.js 通过扩展js的prototype 让不支持html5的浏览器支持html5函数 (持续新增)

上一篇:WebService传输文件的几个知识点


下一篇:实验:innodb 的存储顺序是否完全物理无关?