Переопределить функцию Javascript на основе переданных параметров - PullRequest
2 голосов
/ 29 апреля 2010

Можно ли переопределить функцию в зависимости от количества параметров, которые вы передаете в нее? Например:

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 ]

10 голосов
/ 29 апреля 2010

JavaScript не поддерживает перегрузку функций.

Вы можете, однако:

if (typeof friend === "undefined") {
    // do something
} else {
    // do something else
}
4 голосов
/ 29 апреля 2010

Так как это не было упомянуто здесь, я подумал, что я тоже это выброшу. Вы также можете использовать объект 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 голосов
/ 29 апреля 2010

Да, действительно, JavaScript делает это по умолчанию. Если у вас есть функция:

 function addInts(a, b, c)
 {
      if(c != undefined)
         return a + b + c;
      else
         return a + b;
 }

 addInts(3, 4);
 addInts(3, 4, 5);
1 голос
/ 29 апреля 2010

Вы можете оставить обязательный аргумент и передать остаток в объекте

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)
      ...
}
0 голосов
/ 29 апреля 2010

Нет, собственный Javascript не позволяет перегружать функции.

Обходной путь - просто не отправлять этот параметр. Вы получите неопределенный в последнем параметре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...