1. 程式人生 > >js中的內置方法的兼容寫法

js中的內置方法的兼容寫法

div return 所有 argument 數組 sub arr concat ***

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);
      }
     }
  }

js中的內置方法的兼容寫法