全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JavaScript中使用参数个数实现重载功能

利用参数的个数实现重载,马上想到的方法就是

function overload(){ 
    switch(arguments.length){ 
      case 0: 
        console.log("一个朋友都没有"); 
        break; 
      case 1: 
        console.log("有一个朋友"); 
        break; 
      case 2: 
        console.log("有两个朋友"); 
        break; 
      case 3: 
        console.log("有三个朋友"); 
        break; 
      case 4: 
        console.log("有四个朋友"); 
        break; 
      //等等 
    } 
  } 

这种方式能实现重载,但是这样的代码比较长,实际开发中情况有时候会很多。所以我们可以用下面的方法。

window.onload=function (){ 
    var cat={ 
      friends:["mimi","pp","gg"] 
    } 
    addMethod(cat,"sayName",function(a,b){ 
      console.log("有两个朋友"); 
    }) 
    addMethod(cat,"sayName",function(){ 
      console.log("一个朋友都没有"); 
    }) 
    addMethod(cat,"sayName",function(a){ 
      console.log("有一个朋友"); 
    }) 
    addMethod(cat,"sayName",function(a,b,c){ 
      console.log("有三个朋友"); 
    }) 
    cat.sayName("xiaoming","nihao"); 
    cat.sayName(); 
    cat.sayName("xiaoming"); 
    cat.sayName("xiaoming","xiaohong"); 
  } 
  //实现重载,利用arguments.length的不同来实现 
  function addMethod(object,name,fn){ 
    var old=object[name]; 
    object[name]=function(){ 
      if(fn.length==arguments.length) 
        return fn.apply(this,arguments); 
      else if(typeof old=='function') 
        return old.apply(this,arguments); 
    } 
  } 

这个技巧利用的是闭包,在闭包里作为引用进行存储的不同参数的情况。

实际调用addMethod函数的情况,如下图

为什么会这样呢?

因为闭包的原因,在addMethod的函数中调用了object[name]字面量函数外部的变量old,这使得垃圾回收机制不会回收old,所以old会一直存在内存中,不会消失,我们就是利用的这个特性实现的继承。

下面执行sayName的时候,我们会沿着上边存储的引用依次查找相应的参数,然后找到对应函数来执行。

这种方法还是存在不足:

1.重载只适用于不同数量的参数,但不区分类型、参数或其他东西。

2.这个方法会有函数调用的开销,因为用到了闭包,会占用一些内存。在高性能应用的情况下不适合。

总结

以上所述是小编给大家介绍的JavaScript中使用参数个数实现重载功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# js实现重载  # javascript中通过arguments参数伪装方法重载  # js中方法重载如何实现?以及函数的参数问题  # js模拟如何实现重载以及默认参数  # 小编  # 有一个  # 的是  # 有两个  # 会有  # 在此  # 可以用  # 适用于  # 给大家  # 或其他  # 不适合  # 高性能  # 但不  # 来实现  # 较长  # 所述  # 给我留言  # 包里  # 感谢大家  # 如下图 


相关文章: 建站主机选购指南:核心配置与性价比推荐解析  如何快速生成橙子建站落地页链接?  建站之星会员如何解锁更多建站功能?  金*站制作公司有哪些,金华教育集团官网?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  常州自助建站工具推荐:低成本搭建与模板选择技巧  小型网站建站如何选择虚拟主机?  ,网页ppt怎么弄成自己的ppt?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  javascript中对象的定义、使用以及对象和原型链操作小结  如何在服务器上三步完成建站并提升流量?  如何选择CMS系统实现快速建站与SEO优化?  ,如何利用word制作宣传手册?  如何在阿里云服务器自主搭建网站?  平台云上自助建站如何快速打造专业网站?  如何正确选择百度移动适配建站域名?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  创业网站制作流程,创业网站可靠吗?  网站app免费制作软件,能免费看各大网站视频的手机app?  网站设计制作企业有哪些,抖音官网主页怎么设置?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  如何高效配置IIS服务器搭建网站?  建站之星如何实现五合一智能建站与营销推广?  如何在局域网内绑定自建网站域名?  如何在Windows服务器上快速搭建网站?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  如何选购建站域名与空间?自助平台全解析  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  建站之星如何开启自定义404页面避免用户流失?  如何在服务器上配置二级域名建站?  网站制作话术技巧,网站推广做的好怎么话术?  宝塔建站无法访问?如何排查配置与端口问题?  如何快速登录WAP自助建站平台?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  常州企业建站如何选择最佳模板?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  如何用搬瓦工VPS快速搭建个人网站?  建站之星ASP如何实现CMS高效搭建与安全管理?  如何通过虚拟主机快速搭建个人网站?  广州商城建站系统开发成本与周期如何控制?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  浅析上传头像示例及其注意事项  详解jQuery停止动画——stop()方法的使用  Python如何创建带属性的XML节点  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  孙琪峥织梦建站教程如何优化数据库安全? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。