鱼C论坛

 找回密码
 立即注册
查看: 2410|回复: 1

[作品展示] js重载函数的一种方案

[复制链接]
发表于 2020-10-15 00:28:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. /**对比两个列表项是否相同
  2. * @param {Array}   a1       要进行比较的数组
  3. * @param {Array}   a2       要进行比较的数组
  4. * @return {Boolean}    返回是否相同
  5. */
  6. function arrayEqual(a1,a2){
  7.     if(a1.length!=a2.length)return false;
  8.     var i=a1.length;
  9.     for(--i;i>=0;--i){
  10.         if(a1[i]!=a2[i])return false;
  11.     }
  12.     return true;
  13. }

  14. /**
  15. * 创建重载函数
  16. * @param   {Function} defaultFnc 当没有和实参对应的重载时默认执行的函数
  17. * @return  {Function} 函数
  18. * 用 .addOverload 添加重载
  19. */
  20. function createOlFnc(defaultFnc){
  21.     var rtn=function(){
  22.         var i=arguments.length-1;
  23.         var parameterType=[];
  24.         for(;i>=0;--i){
  25.             parameterType.push(arguments[i].constructor);
  26.         }
  27.         for(i=rtn.ols.length-1;i>=0;--i){
  28.             if(arrayEqual(parameterType,rtn.ols[i].parameterType)){
  29.                 return rtn.ols[i].fnc.apply(this,arguments);
  30.             }
  31.         }
  32.         rtn.defaultFnc.apply(this,arguments);
  33.     }
  34.     rtn.ols=[];
  35.     rtn.defaultFnc=defaultFnc;
  36.     /**
  37.     * 添加一个重载
  38.     * @param {Array} parameterType 形参的类型
  39.     * @param {Function} fnc        执行的函数
  40.     */
  41.     rtn.addOverload=function(parameterType,fnc){
  42.        this.ols.push({parameterType:parameterType,fnc:fnc});
  43.     }
  44.     return rtn;
  45. }
复制代码


使用列
  1. var d=createOlFnc(function(){console.log(123);});
  2. d.addOverload([String],function(str){console.log("this is a string: "+str);});
  3. d();//123
  4. d("abcabcabc");//this is a string: abcabcabc
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-10-15 00:34:54 | 显示全部楼层
还有一件事,请问怎么给它加注释?
用function关键字声明函数之后,在调用函数的时候编辑器会根据声明时的形参和注释弹出提示。但是如果是像这样写在重载里,调用的时候就看不到注释了。
该怎么给重载加注释呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 06:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表