是否可以根据您传入的参数数量覆盖函数?例如:
function abc(name) {
document.write ('My name is' + name);
}
function abc(name,friend) {
document.write ('My name is' + name + 'and my best friend\'s name is' + friend);
}
所以在HTML中,如果我刚刚调用abc(george)它将使用该函数的第一个版本,但如果我调用abc(george,john)它将使用第二个版本。
可能有其他方法可以完成我使用的示例,但我只是想知道这个概念在javascript中是否合理。
答案 0 :(得分:10)
JavaScript不支持函数重载。
但是你可以:
if (typeof friend === "undefined") {
// do something
} else {
// do something else
}
答案 1 :(得分:4)
由于这里没有提及,我以为我也会把它扔出去。如果您的唯一目的是根据参数的数量覆盖(如您在第一句中提到的那样),也可以使用arguments对象:
switch (arguments.length) {
case 0:
//Probably error
break;
case 1:
//Do something
break;
case 2:
default: //Fall through to handle case of more parameters
//Do something else
break;
}
答案 2 :(得分:2)
是的,确实,JavaScript默认情况下这样做。如果你有一个功能:
function addInts(a, b, c)
{
if(c != undefined)
return a + b + c;
else
return a + b;
}
addInts(3, 4);
addInts(3, 4, 5);
答案 3 :(得分:1)
您可以保留必需的参数并将余数传递给对象
abc(name);
abc(name, {"friend": friend});
abc(name, {"friend": friend, "age": 21});
function abc(name, extra) {
if (!extra.friend)
alert("no mates");
for (var key in extra)
...
}
答案 4 :(得分:0)
不,原生Javascript不允许重载功能。
解决方法就是不发送该参数。你将在最后一个参数中得到未定义。