js可以通过arguments.length模拟参数个数不同的重载,可是如何实现参数类型不同的重载呢?
-------------------------------------------
同名的函数,如果传入的参数个数不同,执行不同的操作,这种重载通过 arguments.length属性可以实现,
但是对于类型不同的重载,如何来模拟呢?
比如同名的两个函数,一个参数是数字型,另一个函数的参数是字符串型,(只是举例子)
这种情况下,如何模拟重载呢?
-------------------------------------------
同名的函数,如果传入的参数个数不同,执行不同的操作,这种重载通过 arguments.length属性可以实现,
但是对于类型不同的重载,如何来模拟呢?
比如同名的两个函数,一个参数是数字型,另一个函数的参数是字符串型,(只是举例子)
这种情况下,如何模拟重载呢?
if(typeof name === "string") alert("string "); //handler string
if(typeof name === "number") alert("number "); //handler number
}hey(123);
hey("abc");
{
if(arguments.length=1)
{
alert(arguments[1]);
}
else if(arguments.length=2)
{
alert(arguments[0]+arguments[1])
}
else
{
alert("有多个参数")
}}
fun("hello")//输出hello
fun(1,2)//输出3
fun(1,2,"hello")//输出有多个参数
js 函数,是只认函数名称的,不管参数列表的!调用时,是按顺序一一对应!
如果一个函数 function fun(a,b){}
调用时:
fun(1,2) => a=1;b=2
fun(1) => a=1;b=undefined
fun(1,2,3) => a=1;b=2 , 3 无用要实现方法重载,只有根据参数类型和数量来判断,分别做不同的处理
但是多数时候我用JSON来做参数,然后在函数内部判断类型。
之前在蓝色理想上看见一个人写了个重载类,我说用JSON就可以了,这样做没什么大意义。。
结果让一个高手骂了个狗血喷头。。
可能是境界不到吧,个人感觉,在js里面,没有必要去刻意做一些重载的东西。
<script>
alert(typeof []); //typeof 数组是 object
alert([] instanceof Array); // 数组instanceof Array 是true 判断更精确一些
</script>