博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用JavaScript实现函数重载
阅读量:5971 次
发布时间:2019-06-19

本文共 1702 字,大约阅读时间需要 5 分钟。

           重载函数的定义:在相同的声明域中,如有多个函数名相同的,而参数表不同的(参数类型不同或参数个数不同),返回值类型可以相同也可以不同的函数,称之为重载函数。函数的参数表是区别重载函数的唯一标识,而非函数的返回值。重载函数常用来实现功能类似而所处理的数据类型不同的问题。

           然而,ECMAScript函数不能像传统意义上那样实现重载。如果在ECMASript中定义了两个名字相同的函数,则该名字只属于后定义的函数。例:  

function Add(a){    return a+10;};function Add(a){    return a+20;}var result=Add(2);alert(result);     //22

           但是可以通过判断传入参数的个数和类型来实现函数重载这一功能。

           1. 通过判断传入参数的个数

           ECMAScript中的参数在内部是用一个数组来表示的。在函数体内,可以通过arguments对象来访问这个参数数组。arguments对象与数组类似,可以使用方括号语法来访问它的每一个元素(即arguments[0]是第一个参数),使用length属性来确定传递参数的个数。可利用length来判断传如参数的个数,进而执行不同的操作。例:      

function doSum(){   if(arguments.length==1){     alert(arguments[0]+20);} else if(arguments.length==2){     alert(arguments[0]+arguments[1]); }}doSum(10);     //30doSum(10,60);      //70

         对于EMCAScript函数的参数进行一些说明:ECMAScript函数中,命名的参数只是提供便利,并不是必须的。即,在这定义函数时即使没有命名参数出现,只要在实际使用时传入了参数,就可以通过arguments访问到。 

         还有另一种利用闭包特性的实现重载的方法,详见。         

 

2. 通过判断传入参数的类型

           要检测一个变量是不是基本数据类型,可以通过typeof操作符来确定一个变量是string、number、boolean还是undefined。需要注意的是,如果变量的值是一个对象或null,则typeof操作符会返回object。使用实例:

function DoSomething(){    if(typeof(arguments[0])== "number"){       alert(arguments[0]+10);} else if(typeof(arguments[0])== "string"){       alert(arguments[0].split(""));     }}DoSomething(10);            //20DoSomething("Hello");      //H,e,l,l,o

          想要知道某个对象变量是什么类型的变量,可使用instanceof操作符。如果变量是给定引用类型的实例,instanceof操作符会返回true。根据规定,所有引用类型的值都是Object的实例,因此在检测一个引用类型是否是Object构造函数的实例时,instanceof会始终返回true。但是如果用instanceof操作符检测基本类型是,会始终返回false。使用实例:

function DoSomething(a){    if(a instanceof Array){       alert(a.length);} else if(a instanceof Object){       alert(a.name);     }}DoSomething([1,2,3]);                     //3DoSomething({"name":"Sofia"});     //Sofia

 

 

           

转载于:https://www.cnblogs.com/SofiaTJU/p/8987828.html

你可能感兴趣的文章
框架集成
查看>>
Split Shape by Plane in OpenCASCADE
查看>>
备份和恢复Android手机分区的方法
查看>>
ASP.NET MVC Controller激活系统详解:默认实现
查看>>
阿里云支撑马来西亚数字自由贸易区落地 帮助马来西亚中小企业参与全球贸易...
查看>>
用电线来传网络信号的黑科技?AirGig究竟是什么
查看>>
Web颜色对照表大全
查看>>
离线在CentOS上安装CDH
查看>>
顶象陈树华:安全也能共享?你没看错!
查看>>
变速自行车的变速、省力原理与窍门
查看>>
十一来临,国内有哪些手机智能助手帮你出行?
查看>>
Go 语言的包依赖管理
查看>>
个人信息泄露,背后竟有“内鬼”作祟,堵上网络安全漏洞
查看>>
用TensorFlow和TensorBoard从零开始构建ConvNet(CNN)
查看>>
下一代防火墙市场高速增长,年复合增长率为13.6%
查看>>
OpenAI及DeepMind两团队令未来的AI机器更安全
查看>>
盘点海外动力电池巨头 细数日韩锂电设备企业
查看>>
全民大数据时代已来 阿里数加平台详解
查看>>
Acalvio正式推出其新型安全防御技术——流欺骗
查看>>
全球范围快速成长未来十年是SaaS发展的黄金时期
查看>>