基于传递的参数重写Javascript函数
是否可以根据传递给函数的参数数重写函数?例如:基于传递的参数重写Javascript函数,javascript,function,parameters,overriding,Javascript,Function,Parameters,Overriding,是否可以根据传递给函数的参数数重写函数?例如: 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),它将使用函数的第一个版本,但是如果
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中是否合理。javascript不支持函数重载 但是,您可以:
if (typeof friend === "undefined") {
// do something
} else {
// do something else
}
是的,事实上,JavaScript在默认情况下做到了这一点。如果您有一个功能:
function addInts(a, b, c)
{
if(c != undefined)
return a + b + c;
else
return a + b;
}
addInts(3, 4);
addInts(3, 4, 5);
不,本机Javascript不允许重载函数
解决方法就是不要发送那个参数。您将在最后一个参数中得到未定义。您可以保留必需的参数,并在对象中传递剩余的参数
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)
...
}
既然这里没有提到,我想我也应该把它扔出去。如果您的唯一意图是基于参数的数量(如您在第一句中提到的)重写,那么您也可以使用arguments对象:
这是在JavaScript中实现方法重载的标准方法吗?谢谢,我不知道这类事情的术语是什么(难怪我的Google搜索结果糟透了!)。此外,我注意到您在示例中使用了严格的等式。当我实际传递它时,friend是整数还是字符串有关系吗?因此,abc(george,5)而不是abc(george,john)或abc(george,5”)。@george,在这种情况下,严格的相等性实际上并不重要,因为
typeof
运算符将始终返回字符串,即使对于宿主对象也是如此。
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;
}