JavaScript 模拟重载

/**
  * 参数个数对应 各自处理的函数 不指定 则执行 默认函数
  * [
  *    d       : function (             ) {}
  *  , 0       : function (             ) {}
  *  , 1       : function ( a           ) {}
  *  , 2       : function ( a, b        ) {}
  *  , 3       : function ( a, b , c    ) {}
  *  , 4       : function ( a, b , c, d ) {}
  * ]
 */

! function ()
  {
    var
      _reload = ( function ()
      {
        var
          _default = function () {}             //  设置默认函数

          ; return function ( funcs, _def )
            {
              ; funcs       = funcs.slice()     //  配置处理函数 slice 防外部修改
              ; funcs["d"]  = _def || _default  //  配置默认函数

              ; return function ()
                {
                  ; return ( funcs[ arguments.length ] || funcs.d ).apply( this, arguments )
                }
            }
      }())

    , test    = _reload(
      [
          function (         ) { return 0           }
        , function ( x       ) { return x * x       }
        , function ( x, y    ) { return x / y       }
        , function ( x, y, z ) { return x * y * z   }
      ] , function (         ) { return ‘error‘     })
      //
    , obj     =
      {
          name : ‘test‘
        , test : _reload(
          [
              function (         ) { return this.name       }
            ,,
            , function ( x, y, z ) { return this.name + x + y + z   }
          ])
      }
      //
    ; console.log( "test", test(            ))
    ; console.log( "test", test( 9          ))
    ; console.log( "test", test( 9, 8       ))
    ; console.log( "test", test( 9, 8, 7    ))
    ; console.log( "test", test( 9, 8, 7, 6 ))
    ; console.log( "------------------------")
    ; console.log( "obj.test", obj.test(            ))
    ; console.log( "obj.test", obj.test( 9          ))
    ; console.log( "obj.test", obj.test( 9, 8       ))
    ; console.log( "obj.test", obj.test( 9, 8, 7    ))
    ; console.log( "obj.test", obj.test( 9, 8, 7, 6 ))

  }()

JavaScript 模拟重载

时间: 2024-10-22 22:43:55

JavaScript 模拟重载的相关文章

javascript 函数重载 overloading

函数重载 https://en.wikipedia.org/wiki/Function_overloading In some programming languages, function overloading or method overloading is the ability to create multiple methods of the same name with different implementations. Calls to an overloaded functi

javascript模拟post提交隐藏地址栏的参数

想要隐藏地址栏的参数,就只能用javascript模拟post提交,下面是示例代码,需要的朋友可以看看 通过js模拟post提交 1:请求需要的参数过长,超过get允许的最大长度 2:想要隐藏地址栏的参数 view source print? 01 //新创建一个form表单 02 document.write('<form name=myForm></form>');  03 var myForm=document.forms['myForm'];  04 myForm.acti

javascript模拟Windows系统下的扫雷游戏

javascript模拟Windows系统下的扫雷游戏. 说好的一周一篇随笔的,这才第三周就延迟交作业了,深深的自责中... 先玩一把 demo 很久以前写的 当时都没写注释的 刚加上了 (尼玛,好多自己都不认识了 ... ) 不足的敌方就是本来想写个游戏排名的统计的,等有空了再加上(好像每次都这么说 然后就等好久好久...) 还有就是没有实现:点击第一个格子不能是雷的功能 刚才在手机端 打开了下这篇文章 排版完全乱了... <style> ul{padding:0;list-style:no

javascript arguments与javascript函数重载

1.所 有的函数都有属于自己的一个arguments对象,它包括了函所要调用的参数.他不是一个数组,如果用typeof arguments,返回的是’object’.虽然我们可以用调用数据的方法来调用arguments.比如length,还有index方法.但是数 组的push和pop对象是不适用的. 2.函数定义时的参数个数和函数调用时的参数个数没有任何关系. 在函数中可以用f.arguments[0]和f.arguments[1]得到调用时传入的第一和第二个参数,arguments不能够创建

C用函数指针模拟重载 C++重载

C中为什么不支持重载,即同一作用域内不允许出现同名函数? 我们都知道重载是c++面向对象的特性.c语言中是不存在的.所谓重载简单来说就是一个函数名可以实现不同的功能,要么输入参数不同或者参数个数不同,要么返回类型不同.例如函数add(),在c++中可以轻易实现int,double等不同类型参数的相加功能,而在c语言中却不能这样实现.c语言中实现重载功能,或者准确来说是类似重载的功能,可以通过函数指针的方式来实现. 函数指针定义 形式1:函数类型 (*指针变量名)(形参列表): “函数类型”说明函

javascript模拟post提交

通过js模拟post提交1:请求需要的参数过长,超过get允许的最大长度2:想要隐藏地址栏的参数 //新创建一个form表单document.write('<form name=myForm></form>');   var myForm=document.forms['myForm'];   myForm.action='runEmpAttendance';   myForm.method='POST'; var input = document.createElement('i

javascript模拟select下拉菜单

javascript模拟select下拉菜单: 由于自带的select下拉菜单确实是不够美观,并且美化的潜力也不够大,所以对外观要求比较高的网站,基本都要使用自定义的select下拉菜单,下面就提供了一个简单的例子供大家参考,代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="

javaScript 函数重载

javaScript函数不支持重载.有时我们想像java.C等语言 一样定义 重载的方法,那么 我们就可以用其他的方式去定义 重载的函数. 当然,实现的方式 有好多种,每个人 可能不同.下面 我贴出我的实现及使用方法 和 大家交流. js 源码: /**  * 函数参数重载方法 overload,对函数参数进行模式匹配.默认的dispatcher支持*和...以及?,"*"表示一个任意类型的参数,"..."表示多个任  *意类型的参数,"?"一般

javascript方法重载惹的祸

先贴出代码,看看执行结果会是什么? function ShowMsg() { //函数1 this.sure = function () { alert("ok"); }; //函数2 this.sure = function (msg) { alert(msg); }; } var showMsg = new ShowMsg(); showMsg.sure(); 看上面的代码,本以为是两个方法重载的函数,执行后会弹出"ok"的信息.实则却弹出一个空字符的框. 原来