zoukankan      html  css  js  c++  java
  • 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);
          }
         }
      }
  • 相关阅读:
    stl的erase()陷阱--迭代器失效总结
    .NET Framework 概述
    C#在代码中编写输出debug信息-类Debug的使用
    C# 开发的windows服务 不能调试——讨论整理
    C#开发windows服务如何调试——资料整理
    iis深入学习资源
    网站因权限问题报错
    数据库建表经验总结——建表现象—sql查询疑惑
    java8大基本类型
    存储过程中的事务
  • 原文地址:https://www.cnblogs.com/wu-web/p/7860184.html
Copyright © 2011-2022 走看看