• js实现函数重载


    js本身由于其并不检查参数的个数和类型,而是直接把参数放到一个arguments的对象中,由于这种机制我们并不能像c++和java一样去实现函数重载,而要在函数里面去判断参数的个数和类型来间接实现函数重载

    function addMethod(object, name, fn){ 
      // Save a reference to the old method 
      var old = object[ name ]; 
     
      // Overwrite the method with our new one 
      object[ name ] = function(){ 
        // Check the number of incoming arguments, 
        // compared to our overloaded function 
        if ( fn.length == arguments.length ) 
          // If there was a match, run the function 
          return fn.apply( this, arguments ); 
     
        // Otherwise, fallback to the old method 
        else if ( typeof old === "function" ) 
          return old.apply( this, arguments ); 
      }; 
    } 
     
    function Ninjas(){ 
      var ninjas = [ "Dean Edwards", "Sam Stephenson", "Alex Russell" ]; 
      addMethod(this, "find", function(){ 
        return ninjas; 
      }); 
      addMethod(this, "find", function(name){ 
        var ret = []; 
        for ( var i = 0; i < ninjas.length; i++ ) 
          if ( ninjas[i].indexOf(name) == 0 ) 
            ret.push( ninjas[i] ); 
        return ret; 
      }); 
      addMethod(this, "find", function(first, last){ 
        var ret = []; 
        for ( var i = 0; i < ninjas.length; i++ ) 
          if ( ninjas[i] == (first + " " + last) ) 
            ret.push( ninjas[i] ); 
        return ret; 
      }); 
    } 

    /*Test*/
    ninjas = new Ninjas()
    ninjas.find(); //["Dean Edwards", "Sam Stephenson", "Alex Russell"]
    ninjas.find("Sam");//["Sam Stephenson"]
  • 相关阅读:
    Centos7安装gitlab私服
    SpringBoot2.x开发WebSocket
    java中 DecimalFormat格式的定义
    Docker部署Reids实战单机、集群
    CCF地铁修建
    C题:A Water Problem(dp||搜索)
    A题:Common Substrings(KMP应用)
    HDU 1879 继续畅通工程(Prim||Kruscal模板题)
    魔兽世界之一:备战(模拟)
    F题:等差区间(RMQ||线段树)
  • 原文地址:https://www.cnblogs.com/kinthon/p/5008309.html
Copyright © 2020-2023  润新知