js中的内置方法的兼容写法

1、如果浏览器不支持every属性,every的实现原理

if(Array.prototype.every===undefined){
     Array.prototype.every=function(fun){
      //遍历当前数组中每个元素
      for(var i=0;i<this.length;i++){
          if(this[i]!==undefined){
//调用fun,依次传入当前元素值,位置i,当前数组作为参数  ,将返回值,保存在变量r中
          var r=fun(this[i],i,this);
          if(r==false){//如果r为false
             return false;//返回false
          }
          }
           }//(遍历结束)
       return true;//返回true
     }
  }

2、如果浏览器不支持some属性,some的实现原理

if(Array.prototype.some===undefined){
     Array.prototype.some=function(fun){
        for(var i=0;i<this.length;i++){
        if(this[i]!==unefined){
          var r=fun(this[i],i,this);
              if(r==true){ return true; }
                }
            }
        return false;
     }    
  }

3、浏览器不支持map属性,map的实现原理

if(Array.prototype.map===undefined){
     Array.prototype.map=function(fun){
      //创建空数组: newArr
      var newArr=[];
      //遍历当前数组中每个元素
      for(var i=0;i<this.length;i++){
         //如果当前元素不是undefined
         if(this[i]!==undefined){//判断稀疏数组
//调用fun传入当前元素值,位置i,当前数组,将结果保存在r中
              //将newArr的i位置赋值为r
          var r=fun(this[i],i,this);
                  newArr[i]=r;
         }
      }//(遍历结束)
      return newArr;//返回newArr
     }
  }

4、如果浏览器不支持reduce属性,reduce的实现原理

if(Array.prototype.reduce===undefined){
     Array.prototype.reduce=function(fun,base){
       base===undefined&&(base=0);
       for(var i=0;i<this.length;i++){
      if(this[i]!==undefined){
         base=fun(base,this[i],i,this);
      }
           }
       return base;
         }
  }

5、如果浏览器不支持bind属性, bind函数的实现原理

if(Function.prototype.bind===undefined){
     Function.prototype.bind=function(obj/*,参数列表*/){
      var fun=this;//留住this
              //*****将类数组对象,转化为普通数组
      var args=Array.prototype.slice.call(arguments,1);
      //args保存的就是提前绑定的参数列表
      /*function slice(1){
         var sub=[];
         for(var i=0;i<length;i++){
          sub.push(arguments[i]);
         }
         return sub;
      }*/
      return function(){
                 //将后传入的参数值,转为普通数组      
         var innerArgs=Array.prototype.slice.call(arguments);//将之前绑定的参数值和新传入的参数值,拼接为完整参数之列表
         var allArgs=args.concat(innerArgs)
        //调用原始函数fun,替换this为obj,传入所有参数
        fun.apply(obj,allArgs);
      }
     }
  }

 

转载于:https://www.cnblogs.com/wu-web/p/7860184.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值