В объектно-ориентированном программировании многие языки поддерживают перегрузку функции и могут выполнять разные операции в соответствии с различными числами и типами параметров, передаваемых функцией. Тем не менее, JS не поддерживает его, поэтому нам нужно выполнить несколько небольших действий.
В контексте выполнения функции JS есть интересная переменная, называемая аргументами. Он сохраняет все параметры, передаваемые во время выполнения функции в форме массива, даже если определение функции не определяет так много формальных параметров. Другая особенность заключается в том, что по сравнению с типом массива, переменная аргументов имеет и имеет только один атрибут длины. Методы массива, такие как толчок, поп и т. Д., Не имеют его. Это всего лишь «псевдо-арайр»: он имеет атрибут длины, и хранимый массив может быть доступен с помощью символа Access [], и он только для чтения и не может быть записан.
1. перегрузка разных чисел
Здесь должно быть очень ясно, что вы можете просто использовать атрибут длины функции аргументов для суждения.
Кода -копия выглядит следующим образом:
<script type = "text/javascript">
Функция Talk (MSG, Handler) {
var len = arguments.length;
// выполнять при прохождении параметра
if (len == 1) {
оповещение («Функция говорит:«+msg);
}
// выполнять, когда передаются два параметра
иначе if (len == 2) {
обработчик (MSG);
}
}
говорить («демо»);
talk ("demo", function (w) {alert ("обработчик говорит:"+w);});
</script>
2. Перегрузка различных типов параметров
Для динамически напечатанного языка, такого как JS, произвольный характер объявлений переменных преуменьшает важность строгих типов переменных в умах разработчиков (PS: также на основе системы ECMA, как представляет обязательные типы объявлений переменных). Многие неожиданные ошибки фактически вызваны автоматическим преобразованием этого типа переменной. Фактически, JS предоставляет очень точный метод для строгого обнаружения типов переменных. Более распространенными являются метод типа и атрибут конструктора.
1.
Кода -копия выглядит следующим образом:
temp = "Say"; //нить
темп = 1; //число
Temp = не определен; //неопределенный
Temp = null; //объект
temp = {}; //объект
temp = []; //объект
temp = true; // логический
temp = function () {} // функция
оповещение (TypeOf Temp);
Через приведенный выше тест вы можете увидеть, что для нуля, объекта и массива все типы объектов возврата, и использование следующего метода может решить эту проблему.
2. Атрибут конструктора обнаруживает тип переменной
Каждый объект в JS имеет атрибут конструктора, который используется для ссылки на функцию, которая строит этот объект. Оценивая эту ссылку, могут быть обнаружены типы переменных.
Кода -копия выглядит следующим образом:
temp = "Say";
temp.constructor == string; //истинный
temp = {};
temp.constructor == object; // true
temp = [];
temp.constructor == Array; // true
Через приведенный выше тест легко различать переменные массива и типа объекта. Давайте проверим пользовательский объект, чтобы увидеть, что произойдет.
Кода -копия выглядит следующим образом:
// пользовательский объект
function ball () {}
// создание объекта
var basketball = new Ball ();
баскетбол.constructor == Ball; //истинный
Это может указывать на то, что атрибут конструктора также применим к пользовательским объектам.
После понимания применения двух вышеупомянутых методов вернемся к моделированию перегрузки функции JS. Следующий пример перегружается в соответствии с типом параметра.
Кода -копия выглядит следующим образом:
Функция Talk (MSG) {
var t = typeof msg;
if (t == "String") {
оповещение («Это строка»);
}
иначе if (t == "number") {
оповещение («это число»);
}
}
разговор (10); // это строка
говорить («демо»); // это число
Прикреплена очень умная функция, которая строго обнаруживает типы и числа параметров:
Кода -копия выглядит следующим образом:
// Строго проверяйте тип списка переменных на основе списка параметров
Функция строго (типы, args) {
// Убедитесь, что число и тип ядра параметров соответствует
if (types.length! = args.length) {
// Если длина не совпадает, будет брошено исключение
бросить «неверное количество аргументов. ожидается» + types.length + », получен« + args.length + »вместо этого.»;
}
// пройти через каждый параметр и проверить базовый тип
for (var i = 0; i <args.length; i ++) {
// Если определенный тип JavaScript не совпадает, будет брошено исключение
if (args [i] .constructor! = types [i]) {
бросить "неверный тип аргумента. Ожидаемый" + типы [i] .name + ", получен" + args [i] .constructor.name + "вместо этого.";
}
}
}
// Использование приведенного выше метода
функция dofunction (id, name) {
// Обнаружение числа и типа параметров
строгий ([номер, строка], аргументы);
..
}