基于传递参数覆盖Javascript函数

时间:2010-04-29 15:16:58

标签: javascript function parameters override

是否可以根据您传入的参数数量覆盖函数?例如:

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中是否合理。

5 个答案:

答案 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不允许重载功能。

解决方法就是不发送该参数。你将在最后一个参数中得到未定义。