javascript其实是不支持重载的,这篇文章会和java语言函数的重载对比来加深对javascript函数重载的理解。

      以下我会假设读者不了解什么是重载所以会有一些很基础的概念的,如果你是大神那么你可以离开了。

      说函数的重载之前大家要理解什么是函数的重载,由于开头说JavaScript不支持函数的重载(不代表不能实现重载)本文是以java来做对比的所以先说说java函数重载的实现看下面一段代码

  1. public class Person {
  2. public static void main(String[] args){
  3. Person info = new Person();
  4. info.show();
  5. info.show("小明");
  6. info.show("小明",24);
  7. info.show(24,"小明");
  8. }
  9. public void show(){
  10. System.out.println("没有参数可以执行");
  11. }
  12. public void show(String name){
  13. System.out.println("----------- 1 --------------");
  14. System.out.println("Perosn name:"+name);
  15. }
  16. public void show(String name,int age){
  17. System.out.println("----------- 2 --------------");
  18. System.out.println("Perosn name:"+name);
  19. System.out.println("Perosn age:"+age);
  20. }
  21. public void show(int age,String name){
  22. System.out.println("----------- 2 --------------");
  23. System.out.println("Perosn age:"+age);
  24. System.out.println("Perosn name:"+name);
  25. }
  26. }
  27. //输出结果如下:
  28. /**
  29. 没有参数可以执行
  30. ----------- 1 --------------
  31. Perosn name:小明
  32. ----------- 2 --------------
  33. Perosn name:小明
  34. Perosn age:24
  35. ----------- 2 --------------
  36. Perosn age:24
  37. Perosn name:小明
  38. **/

    在同一个Person出现了多次同名的show方法这些show方法参数个数不同或者参数类型不同 Java 会根据参数的个数和类型来判断应该调用哪个重载方法,参数和类型完全匹配的方法将被执行所以三个show方法都可以得到正确的执行

在来看看javascript如果在同一个作用域内有两个相同名字的函数那么最后一个会覆盖掉前一个重载就无从谈起把上面的java代码转换成JavaScript如下:。

  1. class Person {
  2. show(){
  3. console.log("没有参数也可以执行");
  4. }
  5. show(name){
  6. console.log("----------- 1 --------------");
  7. console.log("Perosn name:"+name);
  8. }
  9. show(name,age){
  10. console.log("----------- 2 --------------");
  11. console.log("Perosn name:"+name);
  12. console.log("Perosn age:"+age);
  13. }
  14. show(age,name){
  15. console.log("----------- 2 --------------");
  16. console.log("Perosn name:"+age);
  17. console.log("Perosn age:"+name);
  18. }
  19. }
  20. let person = new Person();
  21. person.show();
  22. person.show("小明");
  23. person.show("小明",24);
  24. person.show(24,"小明");

    如果你能猜出输出的正确结果证明你理解了为什么说JavaScript不支持重载。

  1. /**
  2. 输出结果如下:
  3. **/
  4. ----------- 2 --------------
  5. Perosn name:undefined
  6. Perosn age:undefined
  7. ----------- 2 --------------
  8. Perosn name:小明
  9. Perosn age:undefined
  10. ----------- 2 --------------
  11. Perosn name:小明
  12. Perosn age:24
  13. ----------- 2 --------------
  14. Perosn name:24
  15. Perosn age:小明

    连续4次输出都是执行了Person的最后那个show方法前面的同名方法都被覆盖了。本身JavaScript的参数也没有定义类型一说不能像Java根据参数定义类型调用的时候传参对应类型去执行相应的方法;JavaScript要想像java那样一个方法传入不同的参数得到不同的结果输出要怎么做?我们改写一下上面的js代码实现想java函数重载的功能。

  1. class Person {
  2. show(name,age){
  3. if(name == null){
  4. console.log("没有参数也可以执行");
  5. }
  6. if(typeof name == "string" && age == null){
  7. console.log("----------- 1 --------------");
  8. console.log("Perosn name:"+name);
  9. }
  10. if(typeof name == "string" && typeof age == "number"){
  11. console.log("----------- 2 --------------");
  12. console.log("Perosn name:"+name);
  13. console.log("Perosn age:"+age);
  14. }
  15. if(typeof name == "number" && typeof age == "string"){
  16. let tmp = name;
  17. name = age;
  18. age = tmp;
  19. console.log("----------- 2 --------------");
  20. console.log("Perosn age:"+age);
  21. console.log("Perosn name:"+name);
  22. }
  23. }
  24. }
  25. let person = new Person();
  26. person.show();
  27. person.show("小明");
  28. person.show("小明",24);
  29. person.show(24,"小明");
  30. //输出结果如下:
  31. /**
  32. 没有参数可以执行
  33. ----------- 1 --------------
  34. Perosn name:小明
  35. ----------- 2 --------------
  36. Perosn name:小明
  37. Perosn age:24
  38. ----------- 2 --------------
  39. Perosn age:24
  40. Perosn name:小明
  41. **/

    以上我们完成了JavaScript函数重载的实现输出结果和java的例子一样,通过传入参数类型不同执行相应的操作实现重载。

理解javascript函数的重载的更多相关文章

  1. 深入理解javascript函数系列第二篇——函数参数

    × 目录 [1]arguments [2]内部属性 [3]函数重载[4]参数传递 前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传 ...

  2. 理解JavaScript函数参数

    前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数. arguments javascri ...

  3. 深入理解javascript函数系列第一篇——函数概述

    × 目录 [1]定义 [2]返回值 [3]调用 前面的话 函数对任何一门语言来说都是一个核心的概念.通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行.在javascript里,函数即 ...

  4. 深入理解javascript函数系列第三篇——属性和方法

    × 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...

  5. javascript函数没有重载测试

    今天继续学习javascript系列教程,虽然是基础,但我觉得还是有必要用心来学习的,不要怕难,不用怕忘记,不要怕学不会.哪个高手不是从零开始的,我要坚定自己的学习信心,并且认真的走下去.虽然路途艰辛 ...

  6. 深入理解javascript函数系列第一篇

    前面的话 函数对任何一门语言来说都是核心的概念.通过函数可以封装任意多条语句,而且可以在任何地方.任何时候调用执行.在javascript里,函数即对象,程序可以随意操控它们.函数可以嵌套在其他函数中 ...

  7. 深入理解javascript函数系列第三篇

    前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解javascript函数 ...

  8. 深入理解JavaScript函数

    本篇文章主要介绍了"深入理解JavaScript函数",主要涉及到JavaScript函数方面的内容,对于深入理解JavaScript函数感兴趣的同学可以参考一下. JavaScr ...

  9. 深入理解JavaScript函数参数

    前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数. arguments javascri ...

随机推荐

  1. PHP上传图片三个步骤详细分析

    学习PHP时,你可能会遇到PHP上传图片问题,这里将介绍PHP上传图片问题的解决方法,在这里拿出来和大家分享一下.今天我们就开始一起学习PHP上传图片.上传图片原理:首先判断文件类型是否为图片格式,若 ...

  2. c++模板两个数的加法

    1.最简单的情况: template<class T> T Add(const T& a, const T& b) { return a + b; } 缺点是不能够处理不同 ...

  3. fidder 调试本地文件

  4. 锤子便签的 monkeyrunner 测试脚本(转)

    https://testerhome.com/topics/878 MonkeyRunner可能大家已经听过无数次了,大家在网上也看过了各种关于的它的资料了,我这里就不再过多的啰嗦它的用途了,它可以对 ...

  5. ElasticSearch — 集群搭建

    1.es需要java环境,故先检查java环境是否正常 2.下载elasticsearch安装包 http://www.elasticsearch.org/download/ 目前最新版本到1.4.0 ...

  6. java包(package)

    为了更好地组织类,java提供了包机制,用于区别类名的命名空间. 这样在不同的命名空间就可以有相同命名的类. 1 把功能相似或相关的类或接口阻止在同一个包中,方便类的查找和使用. 2 如同文件夹一样, ...

  7. Bootstrap学习 - 组件

    下拉菜单 注意:需要先引入jQuery.js再引入bootstrap.js(依赖前者) <div class="dropdown pull-right"> //默认就是 ...

  8. PHP开发利器zend studio常见问题解答

    1.如何将zend studio 9的默认GBK编码设置为其它编码,例如UTF-8? 选择window菜单->Preferences->General->Workspace,在界面当 ...

  9. 【将txt文本转图片】

    [测试类] public static void main(String[] args) { try { File textFile = new File("F:\\java56班\\ecl ...

  10. AutoMapper使用简单总结

    近期,在用AutoMapper整理一些模型对象映射,顺便小结一下使用的体会.难免有写得不对的地方,谢谢指出! 1. AutoMapper是一个.NET的对象映射工具,可以方便地进行对象间的赋值处理. ...