JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数调用的时候,所有的实参都是保存在了这个数据结构里面,我们定义函数的时候所指定的形式参数其实是为这个数据结构里面的数据定义一个快捷的访问方式。也就是说js所有的函数都是支持无限个参数的,加上数据类型是弱类型,那么JS的函数除了名称就真的没有方法区别了?
办法总是有的,我们可以利用JavaScript中的特殊对象arguments来模拟函数重载。用它来判断传入参数的个数或类型以区分重载。
1.根据参数个数重载
js判断传入参数数量可以用arguments.length这个属性来判断;
<script type="text/javascript"> function add() { if (arguments.length == 1) { alert(arguments[0] + 10); } else if (arguments.length == 2) { alert(arguments[0] + arguments[1]); } } //函数调用 add(10); add(10, 20); </script>
2.根据参数类型重载
判断变量类型的3种方法:
1.用 typeof 语句判断变量类型,typeof语句返回类型对应的字符串。
2.用 instanceof 语句判断变量类型,instanceof语句返回true/false。
3.用 constructor 属性判断变量类型,这个属性返回用来构造该变量的构造函数引用。
对照表:可以看出用 typeof 不能准确的判断出具体的类型,所以我们用 constructor 来进行判断。
typeof string number object function boolean object object
constructor String Number Object Function Boolean Array User Define
<script type="text/javascript"> function add() { if (arguments.length == 0) return 0; var sum=0; for(var i=0; i<arguments.length; i++){ if(arguments[i].constructor == Number){ //或者改为:if(arguments[i] instanceof Number) //或者改为:if(typeof(arguments[i])=="number") sum += arguments[i]; } } return sum; } //函数调用 alert(add(10)); alert(add(10,20)); </script>
小伙伴们是否理解了javascript函数重载的方法了呢,有疑问就留言吧
主要内容:C++ 是如何做到函数重载的在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似: 但在 C++中,这完全没有必要。C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是 函数
本文向大家介绍js的回调函数详解,包括了js的回调函数详解的使用技巧和注意事项,需要的朋友参考一下 现在做native App 和Web App是主流,也就是说现在各种基于浏览器的web app框架也会越来越火爆了,做js的也越来越有前途。我也决定从后端开发渐渐向前端开发和手机端开发靠拢,废话不说了,我们来切入正题“js的回调函数”相关的东西。 说起回调函数,好多人虽然知道意思,但是
本文向大家介绍详解JS转换数值函数Number()、parseInt()、parseFloat(),包括了详解JS转换数值函数Number()、parseInt()、parseFloat()的使用技巧和注意事项,需要的朋友参考一下 JS中有三种函数可以将非数值转换成数值:Number()、parseInt()和parseFloat()。第一个函数,即转型函数Number()可以用于任何数据类型,而
本文向大家介绍js正则表达式常用函数详解,包括了js正则表达式常用函数详解的使用技巧和注意事项,需要的朋友参考一下 一、js正则表达式之replace函数用法: 函数功能:replace函数返回根据正则表达式进行文字替换后的字符串的复制。 函数格式:stringObj.replace(rgExp, replaceText) 参数:字符串stringObj,rgExp正则表达式,replaceTex
本文向大家介绍JS中如何实现Laravel的route函数详解,包括了JS中如何实现Laravel的route函数详解的使用技巧和注意事项,需要的朋友参考一下 大家应该都知道在Laravel的路由模块里,我们可以给每一个路由设定一个名字,比如: 然后就可以通过 来获取到这个路由的访问地址,后端跳转可以用 这样做的好处是如果发生url变更,比如我想把 '/blog/{blog}'改成 '/boke/
本文向大家介绍JS中的Replace()传入函数时的用法详解,包括了JS中的Replace()传入函数时的用法详解的使用技巧和注意事项,需要的朋友参考一下 replace方法的语法是:stringObj.replace(rgExp, replaceText) 其中stringObj是字符串(string),reExp可以是正则表达式对象(RegExp)也可以是字符串(string),replace