Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于传递的参数重写Javascript函数_Javascript_Function_Parameters_Overriding - Fatal编程技术网

基于传递的参数重写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;
}