В JavaScript функция функция является объектом.
В JS нет перегрузки метода
В JavaScript нет концепции перегрузки метода (функции).
пример:
Кода -копия выглядит следующим образом:
<html>
<голова>
<script type = "text/javascript">
Функция добавить (номер)
{
предупреждение (число + 20);
}
Функция добавить (номер, номер1)
{
предупреждение (число + 30);
}
добавить (10);
</script>
</head>
<тело>
</body>
</html>
В поле Bullet на веб -странице показано 40.
Объяснение. Хотя второй метод - два параметра, он все еще называется.
После обмена порядком двух методов всплывающее окно отображается 30. Можно увидеть, что независимо от количества параметров, называется следующее метод с тем же именем.
Как объяснить это явление?
Это потому, что объявление функции фактически создает объект:
Кода -копия выглядит следующим образом:
<html>
<голова>
<script type = "text/javascript">
Функция добавить (номер)
{
предупреждение (число + 20);
}
/*
Вышеуказанная функция эквивалентна:
var add = function (номер)
{
предупреждение (число + 20);
}
*/
Функция добавить (номер, номер1)
{
предупреждение (число + 30);
}
/*
Вышеуказанная функция эквивалентна:
var add = function (номер, номер1)
{
предупреждение (число + 30);
}
*/
добавить (10);
</script>
</head>
<тело>
</body>
</html>
Таким образом, добавление фактически указывает на последующий объект, и параметры, назначенные при вызове метода, будут назначены формальным параметрам метода по порядку, а параметры, которые не присваиваются впоследствии, не определены.
При вызове функций JavaScript нет строгой проверки количества параметров. Это нормально иметь фактическое количество параметров меньше, чем количество формальных параметров. Формальные параметры, которые не присваиваются, являются неопределенными значениями.
Также возможно, что количество реальных параметров больше, чем количество формальных параметров. Таким образом, будут использоваться только предыдущие фактические параметры, и дополнительные фактические параметры не будут использоваться.
Функциональный объект
В JavaScript есть объект функции, и все пользовательские функции имеют тип объекта функции.
Все параметры, полученные функциональным объектом, имеют тип строки, последний параметр - это тело функции для выполнения, а предыдущий параметр - это параметры, которые функция действительно должна получить.
пример:
Кода -копия выглядит следующим образом:
<html>
<голова>
<script type = "text/javascript">
var add = new Function ("number", "number1", "alert (number + number1);");
var add = новая функция ("number", "alert (номер + 20);");
добавить (10, 30);
</script>
</head>
<тело>
</body>
</html>
Аргументы неявных объектов
В JavaScript каждая функция имеет неявные аргументы объекта, представляющие параметры, фактически переданные функции.
Аргументы не имеют ничего общего с формальными параметрами функции и их числа.
Аргументы имеют полезную длину атрибута, указывающая на длину фактического параметра. Вы можете использовать это для моделирования перегрузки функции:
Примеры упражнений:
Кода -копия выглядит следующим образом:
<html>
<голова>
<script type = "text/javascript">
Функция добавить (№1, номер2)
{
оповещение (Arguments.Length);
оповещение (аргументы [0]);
оповещение (аргументы [1]);
оповещение (аргументы [2]);
}
// добавить (2, 3, 4);
Функция add2 ()
{
if (1 == Arguments.length)
{
оповещение (аргументы [0]);
}
иначе if (2 == Arguments.length)
{
оповещение (аргументы [0] + аргументы [1]);
}
иначе if (3 == Arguments.length)
{
оповещение (аргументы [0] + аргументы [1] + аргументы [2]);
}
}
add2 (3);
add2 (3, 4);
add2 (3, 4, 5);
</script>
</head>
<тело>
</body>
</html>
Каждый объект функции имеет атрибут длины, указывающий формат параметров, который ожидает функция.
Это отличается от аргументов функции. Arguments.length представляет количество параметров, фактически полученных функцией.
пример:
Кода -копия выглядит следующим образом:
<html>
<голова>
<script type = "text/javascript">
var add = function (num, num2, num3)
{
оповещение (num + num2 + num3);
}
оповещение (add.Length); // Вывод 3
добавить (1, 2, 3);
var add2 = function ()
{
}
оповещение (add2.length); // Вывод 0
</script>
</head>
<тело>
</body>
</html>