Перегрузка методов в JScript

Когда два или более члена JScript (являющиеся функциями или свойствами) в классе имеют одинаковые имена, но разные сигнатуры, они считаются "перегруженными" функциями (свойствами). "Сигнатура" функции основана на номере, типе и порядке принимаемых ей параметров. Две функции имеют одинаковую сигнатуру, если они принимают одинаковое число аргументов одинакового типа и в одинаковом порядке. Функции, принимающие аргументы одинакового типа в различном порядке, или функции, принимающие различное число аргументов или аргументы различных типов, имеют разные сигнатуры. (Обратите внимание на то, что имена аргументов не оказывают влияния на сигнатуру). Статические функции так же могут принимать участие в перегрузке, но только в качестве типов возвращаемых значений; статическое состояние метода не оказывает влияния на его сигнатуру. Поэтому статический метод, имя которого совпадает с именем метода экземпляра, должен иметь другой список параметров.

Логика обработки

При вызове перегруженной функции вызывается та перегруженная функция, аргументы которой наиболее точно соответствуют переданным аргументам в зависимости от реальных типов переданных функции аргументов. Если типы аргументов точно соответствуют определенной перегруженной функции, то вызывается данная функция. Если точное соответствие типов аргументов какой-либо перегруженной функции не найдено, вызываемая функция определяется с помощью процесса исключения. Процесс исключения основан на том, насколько легко можно выполнить преобразование реальных типов в типы доступных перегруженных функций. Дополнительные сведения см. в разделе Приведение типов в языке JScript. В данном примере класс MethodOverload содержит три перегруженных метода с именем "Greetings". Первый перегруженный метод не принимает параметры, второй принимает один параметр типа String, а третий принимает один параметр типа String и один параметр типа int.

var methodOverload = new MethodOverload();
methodOverload.Greetings();
methodOverload.Greetings("Mr. Brown");
methodOverload.Greetings(97, "Mr. Brown");

class MethodOverload
{
   function Greetings()
   {
     print("Hello, and welcome!");
   }
   function Greetings(name : String)
   {
     print("Hello, " + name + "!");
   }
   function Greetings(ticket : int, name : String)
   {
     print("Hello, " + name + "! Your ticket number is " + ticket + ".");
   }
}

После выполнения этой программы выводится следующий результат:

Hello, and welcome!
Hello, Mr.Brown!
Hello, Mr.Brown! Your ticket number is 97.

См. также

Другие ресурсы

Обзор языка JScript

Типы данных в JScript