范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

JS中没有函数重载,又是如何实现函数重载的呢?

  打工仔的周末,不妨来点前端知识!
  面试官问你 JS 是如何实现函数重载的?你会怎么回答?
  你会不会疑问我在书里看的明确讲 JS 是没有函数重载的,面试官说能实现,那肯定是有办法的呀,该如何实现呢?一、什么是函数重载?
  重载函数指的是两个或两个以上的同名函数,实现一个函数名有多种功能。
  函数重载要求编译器能够在调用函数时唯一确定,应该调用的是哪个函数?由于同名函数有多个,在确定函数实现时,需要根据函数的参数的个数和类型来区分,即实现函数重载时,要求同名函数的参数个数或类型不一致,否则将无法实现函数重载。
  重载的特点:同名的多个函数。不同的参数。二、JS中有函数重载吗?
  我在阅读《JavaScript 高级程序设计(第三版)》一书,在第五章看到明确的提示 JS 没有函数重载。
  我们在 《JavaScript 高级程序设计(第三版)》 书中能看到,JS 中的同名函数,前面的会被最后面的函数覆盖掉,根本无法实现多种功能,如:function add(a,b) {  return a+b } function add(a, b, c) {  return a + b + c } console.log(add(1,2)); // NaN console.log(add(1,2,3 ));// 6
  如果我们需要使用 JS 实现上述 add 方法,将两个或三个数值进行求和,该怎么解决呢?
  解决1:利用 argumentsfunction add() {  var reg = arguments;  if (reg.length == 2) {   return reg[0] + reg[1]  } else if(reg.length == 3) {   return reg[0] + reg[1] + reg[2]  } } console.log(add(1, 2)) //3 console.log(add(1, 2, 3)) //6
  上述方法虽然实现了上述简单功能,勉强能算得上是一种函数重载的实现方法,但是存在一定的弊端。
  它的缺点:如果功能复杂时,代码量过大。不利于维护和复用。
  这时候问题来了,利用 JS 如何实现呢?可以通过闭包的形式可以简单地实现。三、JS 如何实现重载?function addMethodToObject (obj, name, fn) {  const temp = obj[name]  obj[name] = function () {   if (fn.length === arguments.length) {    return fn.apply(obj, arguments)   } else if (typeof temp === "function") {    return temp.apply(obj, arguments)   }  } }
  上述方法用来给一个对象添加自定义方法,能够接收三个参数:需要添加方法的对象自定义方法名定义方法具体要实现的功能,通过回调实现addMethodToObject(group, "find", function () {   return {     peoples: this.peoples,     count: this.peoples.length   } })  addMethodToObject(group, "find", function (isMale) {   if (!!isMale) {     const male = this.peoples.filter(item => item.sex === "male")     return {       peoples: male,       count: male.length     }   } else {     const female = this.peoples.filter(item => item.sex === "female")     return {       peoples: female,       count: female.length     }   } })  addMethodToObject(group, "find", function (elder, age) {   if (!!elder) {     const elder = this.peoples.filter(item => item.age >= age)     return {       peoples: elder,       count: elder.length     }   } else {     const younger = this.peoples.filter(item => item.age < age)     return {       peoples: younger,       count: younger.length     }   } }) const group = {     total: 10,     male: 6,     female: 4,     peoples: [{       age: 12,       sex: "male"     }, {       age: 18,       sex: "female"     }] } group.find() group.find(1) group.find(0, 15)
  总结:JS 没有函数重载,但是可以实现函数重载

在现实中,你见识过真正的武功吗?见过啊,这个人就是我二叔。二叔练就一身硬功,曾经与人对打,却把对手反伤到手骨腿骨都震裂,论功夫这一块一生都没有人真正地赢过他。我爷爷在农村做红白事酒席的,平时的工作都是爷爷带着我父为个体车实现任意两点间最低运输成本,云柚货运要用算法改造货运行业REAL100记者程璐编辑中国作为全球最大的物流市场,公路货运市场仍大有可为。在智能化浪潮下,尽管货运行业也诞生了诸如满帮集团货拉拉快狗打车等企业,但整个货车行业的数字化进程仍尚处早期。在中国4平均月薪超2万,全球短缺的网络安全人才究竟有多抢手?没有网络安全就没有国家安全,随着互联网科技经济社会政治时局等多领域不断发展与变革,网络安全问题日趋严峻。信息作为无形的战场,扫码支付涉及到财产安全,自动驾驶涉及到国家地理信息以及每全球畅销手机排行华为全军覆没,苹果占据7席,iPhone12第一近日,知名数据研究机构Counterpoint公布了2021年全球最畅销手机排行榜。榜单中共统计了10款机型,其中苹果占据了前五席。虽然很多国内网友吐槽苹果已经大不如前,但iPho新型储能万亿市场可期阿里巴巴扩大股份回购股融易资讯今日话题十四五新型储能发展重点圈定,万亿市场可期21日从国家能源局网站获悉,近日国家发展改革委国家能源局印发了十四五新型储能发展实施方案,进一步明确发展目标和细化重点任务魅族19Pro已开始试产,有天玑9000帮忙,黄章能翻身吗?说起魅族这个品牌,可能很多人都觉得可惜!毕竟当初发展状态比小米还好,因为起步较早,整体实力完全是国产中数一数二的,但一手好牌并没有持久打出好成绩,魅族进入全面屏时代后很快落后,由于因为我买了部新手机被围观了作为一个80后我用过很多手机第一部手机是诺基亚黑白屏,国庆回家的路上被偷了后来买了部翻盖手机熊猫之后排线老坏又换了直版明基几乎是一年一部新手机大三的时候又用回诺基亚划盖毕业工作后差realmeGTNeo3参数基本清晰对比红米k50,谁更值得选?前不久真我正式官宣将在3月22日召开新品发布会,在这场发布会当中,真我将给广大消费者带来一款名为真我GTneo3的手机机型。根据目前市面上已曝光的信息来看,真我GTneo3这款手机特斯拉被指与俄铝存在交易,数额达百万欧元实习记者田然俄乌冲突下,美国电动汽车公司特斯拉的铝材供应面临风险。据CNBC报道,特斯拉自2020年底起从俄罗斯金属巨头俄罗斯铝业公司(Rusal,下称俄铝)采购了数百万欧元的铝材续航太长没有任何意义,很多人抵触新能源车,并不是因为续航问题这两年新能源车销量有了很大的提升,号称一公里不到1毛钱的电耗,完全碾压燃油车的油耗。虽然新能源车有很多优点,可是依然有很多人抵触新能源车。有人觉得新能源车续航有焦虑,不敢跑高速。可新能源车企称采购宁德时代电池成本上涨两万元近日,一家新能源车企相关负责人接受第一财经记者采访时表示,电池成本上涨比较厉害,自去年下半年至今,宁德时代动力电池涨价两次,按一辆新能源车汽车的电池成本来算,上次涨了1万元,前不久
共享电动自行车HumanForest视觉形象设计HumanForest于2020年推出,是英国首个免费共享电动自行车计划,目标是减少城市的二氧化碳排放量,使之成为一个绿色,健康的工作,生活和娱乐场所。在最初的推广期间,必须在伦敦足球资讯平台OneFootball视觉形象升级OneFootball成立于2008年,是一家总部位于德国柏林的足球资讯平台,其旗舰产品是一款专为全世界足球迷打造的精品App。该公司设有一个24小时新闻编辑室,以生成并提供全面的珠宝品牌FOPE视觉形象升级FOPE创立于1929年,意大利首屈一指的顶级珠宝品牌,凭借纯正的意大利工艺和经典的设计风格享誉全球,总部位于意大利北部城市维琴察,现由创始人家族第三代与第四代继承人管理。今年早些巧克力品牌FellowCreatures视觉形象设计FellowCreatures成立于2019年,是苏格兰的一个纯素巧克力品牌,声称要制作史上最奶油最柔软的牛奶纯素巧克力。今年早些时候,他们公布了一个由匈牙利布达佩斯Classma自动驾驶创企GhostLocomotion视觉形象设计GhostLocomotion创办于2017年,该公司目前正在研发一款套件,可以让私家车驾驶员在高速公路上自动驾驶。该公司表示,将于今年交付该套件,价格尚未确定,不过会低于特斯拉包啤酒品牌Amstel视觉形象升级Amstel成立于1870年,是第一家酿造巴伐利亚风格啤酒的荷兰啤酒厂,早在19世纪80年代就开始了出口业务,150年后的今天,已扩展到全球110个市场。1968年,由喜力国际公司流媒体服务平台HBOMax视觉形象升级2020年4月25日,美国第二大移动运营商ATT宣布,旗下子公司时代华纳所推出的流媒体服务平台HBOMax将于5月27日正式上线,囊括了华纳媒体共计10000小时的视频节目HBO加牙医初创企业Tend视觉形象设计Tend成立于2018年,是一家提供全方位服务的牙科初创公司,旨在从头到尾重新定义牙科的体验。在他们的设计负责人的带领下,整个体验的设计吸引了众多时尚产品设计和摄影领域的合作者,其巴西利亚国家博物馆MuseuNacionaldaRepblica视觉形象升级巴西利亚国家博物馆(MuseuNacionaldaRepblica)是巴西联邦共和国首都巴西利亚的一个公共艺术博物馆,该建筑与巴西利亚国家图书馆建筑均由被誉为建筑界的毕加索Osca冰岛国家足球队Icelandnationalfootballteam视觉形象升级冰岛国家足球队(Icelandnationalfootballteam)的历史可追溯到1912年,但冰岛国家队的第一场国际比赛直到1930年7月29日才到来,受到国际足联官方认可的美国国家仪器公司NI视觉形象升级美国国家仪器公司(NI)成立于1976年,总部设于美国德克萨斯州的奥斯汀市,多年来,该公司开发了众多自动化测试和自动化测量系统,助力工程师解决全球最严峻的难题。本月早些时候,他们推