Игорь Квинт - HTML, XHTML и CSS на 100%
Функции могут быть рекурсивными, то есть прямо или косвенно вызывать сами себя. Если в теле функции явно используется вызов этой же функции, то имеет место прямая рекурсия. Если же функция содержит обращение к другой функции, содержащей прямой или косвенный вызов первой функции, то данная функция является косвенно рекурсивной. Классический пример – функция для вычисления факториала неотрицательного целого числа (листинг 11.22).
Листинг 11.22. Пример рекурсивной функции<html>
<head>
<title>Пример рекурсивной функции </title>
<script>
function fact(n)
{
if (n<0) return(null); //Проверка на отрицательные числа
if (n==0) return (1); //Проверка на 0
return (n*fact(–n));//Рекурсивный вызов
}
</script>
</head>
<body>
<script>
var x=prompt("Введите число","5");
x=+x;
//Вызываем функцию
alert (x+"!="+fact(x));
</script>
</body>
</html>
Для отрицательного числа факториала не существует. В этом случае возвращается null. Для нулевого значения функция возвращает 1, так как 0!=1. В противном случае вызывается та же функция с декрементом параметра и результат умножается на текущее значение параметра. Вызов функции прерывается при вызове fact (0) (рис. 11.16).
Рис. 11.16. Пример рекурсивной функции
Знакомство с событиями
Очень часто язык JavaScript применяется для реагирования на события, которые могут быть вызваны пользователем или браузером. К событиям относятся открытие новой страницы, перемещение указателя мыши, щелчок кнопкой мыши и т. д. Каждое событие имеет соответствующий обработчик, который автоматически реагирует на возникшее событие.
Так, событие onLoad происходит после загрузки какого-либо элемента, например веб-страницы. Использование обработчика этого события позволяет выполнять JavaScript-код сразу после полной загрузки документа.
Одним из часто используемых событий является щелчок кнопкой мыши на объекте. При его возникновении обработчик события onClick объекта выполняет код JavaScript (листинг 11.23).
Листинг 11.23. Пример обработчиков событий<html>
<head>
<title>Пример обработчиков событий</title>
<script>
function mes()
{
alert ("Замечательная ссылка");
}
</script>
</head>
<body>
<h2>Пример обработчиков событий</h2>
<a href=http://www.myserver.ru/page1.html onClick="mes()">Ссылка 1</a>
<br>
<a href=http://www.myserver.ru/page2.html
onClick="alert('Еще одна ссылка')">Ссылка 1
</a>
</body>
</html>
Из данного кода видно, что обработчик события может быть вызовом функции. Однако может и непосредственно указываться JavaScript-код. В данном случае оба обработчика вызывают метод alert() (рис. 11.17).
Рис. 11.17. Пример обработчиков событий
11.6. Встроенные объекты JavaScript
Объекты JavaScript объединяют в себе переменные, именуемые свойствами, и функции, управляющие этими свойствами, именуемые методами. Кроме того, они могут реагировать на события. Пользователь может создавать свои объекты, но JavaScript содержит ряд базовых объектов.
• Global – набор высокоуровневых свойств и методов, у которых нет родительского объекта.
• String – позволяет форматировать и изменять текстовые строки.
• Number – дает возможность обрабатывать числа.
• Boolean – позволяет создавать логические величины.
• Array – дает возможность создавать и управлять массивами.
• Function – позволяет создать функцию.
• Date – дает возможность работать с временем и датой.
• Math – предоставляет некоторые математические функции и константы.
• RegExp – позволяет выполнять функции регулярных выражений для заданных строк.
• Object – является прототипом для всех объектов.
Объект Global
Этот объект содержит несколько методов и свойств, которые не принадлежат ни одному объекту (табл. 11.12 и 11.13). Для удобства их объединили в объект Global.
Таблица 11.12. Свойства объекта GlobalТаблица 11.13. Методы объекта GlobalДля доступа к методам и функциям этого объекта родительский объект не указывается:
flag=isFinite(x/y)
Объект String
Объект String предоставляет средства для форматирования и выделения части строк. Для этой цели он содержит обширный перечень методов (табл. 11.14 и 11.15).
Таблица 11.14. Свойства объекта StringТаблица 11.15. Методы объекта StringРассмотрим использование методов объекта String:
MyText="Я люблю HTML";
MyText=MyText.substring(0,8)+"JavaScript";
В результате строка MyText примет значение «Я люблю JavaScript».
Объект Number
Объект Number обычно применяется для доступа к некоторым постоянным значениям, например к отрицательной бесконечности. Свойства и методы этого объекта указаны в табл. 11.16 и 11.17.
Таблица 11.16. Свойства объекта NumberТаблица 11.17. Методы объекта NumberОбъект Boolean
Объект Boolean обычно используется для преобразования объекта в логическое значение. Этот объект имеет ограниченное количество методов и свойств (табл. 11.18).
Таблица 11.18. Методы и свойства объекта BooleanОбъект Array
С массивами вы уже познакомились в данной главе, однако массивы – это объекты, которые имеют свои свойства и методы, облегчающие работу программисту (табл. 11.19 и 11.20).
Таблица 11.19. Свойства объекта ArrayТаблица 11.20. Методы объекта ArrayОбъект Function
С помощью объекта Function можно манипулировать функцией как объектом. Этот объект содержит ряд специфичных методов и свойств (табл. 11.21 и 11.22).
Таблица 11.21. Свойства объекта FunctionТаблица 11.22. Методы объекта FunctionСинтаксис определения объекта Function выглядит следующим образом:
ИмяОбъектаФункции = new Function ([аргумент1, аргумент2,.. аргументN],
телоФункции);
Например,
sumFunc = new Function ("a","b","return(a+b)");
alert(sumFunc(5,4));
Объект Date
Объект Date предоставляет значительное количество свойств и методов, связанных с датами и временем (табл. 11.23 и 11.24). В качестве базовой даты в JavaScript принято 1 января 1970 года. Язык JavaScript имеет доступ только к времени и дате на клиентской машине.
Таблица 11.23. Свойства объекта DateТаблица 11.24. Методы объекта DateКонструктор этого объекта принимает значение даты в числовом или строковом формате:
ИмяОбъектаДаты = new Date();
ИмяОбъектаДаты = new Date(миллисекунды);
ИмяОбъектаДаты = new Date("месяц дд, гггг чч:мм:сс");
ИмяОбъектаДаты = new Date(год, месяц, день [, час, минуты, секунды, миллисекунды]);
где значение определяется следующим образом:
• миллисекунды – целое число, определяющее количество миллисекунд, прошедших с 0 часов 0 минут 0 секунд 1 января 1970 года по Гринвичу;
• месяц, дд, гггг, чч, мм, сс – месяц, день, год, час, минуты и секунды соответственно;
• год, месяц, день, час, минуты, секунды, миллисекунды – целые числа, определяющие соответствующие величины.
Если параметры не указаны, то объект инициализируется текущей датой и временем.
Например, чтобы узнать текущий день недели, можно воспользоваться следующим кодом:
MyDate=new Date();
alert(MyDate.getDay());
Этот код отобразит число от 0 до 6, соответствующее дню недели. Например, 0 соответствует воскресенью.
Объект Math
Для математических вычислений JavaScript поддерживает объект Math, который содержит ряд математических констант и функций (табл. 11.25 и 11.26).
Таблица 11.25. Свойства объекта MathТаблица 11.26. Методы объекта MathОбъект RegExp
Регулярные выражения – это шаблоны для поиска определенных комбинаций символов в строках. В данной книге мы не будем рассматривать регулярные выражения, но список методов и свойств объекта RegExp, позволяющего создавать регулярные выражения, можно найти в табл. 11.27 и 11.28.
Таблица 11.27. Свойства объекта RegExpТаблица 11.28. Методы объекта RegExpОбъект Object
Все объекты в JavaScript – и встроенные, и пользовательские – наследуются от объекта Object, то есть его методы и свойства (табл. 11.29 и 11.30) присутствуют в каждом объекте, но, как правило, их переопределяют.
Таблица 11.29. Свойства объекта ObjectТаблица 11.30. Методы объекта ObjectРезюме