Чтобы избежать лишних null и сделать код более понятным, используют нечто вроде "keyword arguments", существующих в Python и Ruby. Для этого много параметров пакуют в единый объект:
function resize(setup) {
// значения по умолчанию
var saveProportions = setup.saveProportions || true
var animate = setup.animate || true
var toHeight = setup.toHeight ||...
}
Вызов теперь делается гораздо проще:
var setup = {toWidth: 100, animate: true}
Resize(setup)
// или
resize({toWidth: 100, animate: true})
Так - куда понятнее. А если параметров больше 5, то вообще - единственный нормальный способ.
Кроме того, с объектом можно удобнее делать последовательности вызовов вроде:
var setup = {toWidth: 100, animate: true, saveProportions: false}
Resize(setup)
setup.toWidth = 200
Resize(setup)
Функции в Javascript - это вторая по важности (после объектов) конструкция в Javascript. Например, если нужно при наведении мыши на кнопку создать выпадающее меню или плавно развернуть вкладку - это всё делается с помощью функций.
Рассмотрим синтаксис функции:
<script type="text/javascript"> function имя функции (аргумент1,аргумент2...) { команды, которые должна исполнить функция; return (переменные или другие объекты, которые должна возвратить функция. Если таковых нет - return не пишем.); } </script>
Для вызова функции непосредственно в самом скрипте достаточно написать её имя и, если нужно, - её параметры, например, напишем и применим функцию, которая будет суммировать две переменные:
<script type="text/javascript">var sa = 100; var sha = 1; function summa (a,b) { var sum = a + b; return (sum); } document.write(summa(sa,sha));/*это упрощенная запись, если не понятно - вот неупрощенный код*/ var result = summa(sa,sha); document.write(result); </script>
Итак, - мы знаем как создать и применить в скрипте функции. Давайте научимся вызывать их с помощью кнопки на страничке. Для этого достаточно у параметра href вместо адреса прописать такой код:
javascript:имя функции(/*и если нужно - то здесь можно прописать и её параметры*/);
Давайте таким способом доделаем записанный ранее скрипт, чтобы вызывать функцию summ с помощью кнопки. Для этого нужно сверстать такой код:
<html> <head> <title>Сумма</title> <script type="text/javascript"> var sa = 100; var sha = 1; function summa (a,b) { var sum = a + b; return(sum); } function wivodNaDispley() { document.write(summa(sa,sha)); } </script> </head> <body> <h3 align="center"><a href="javascript:wivodNaDispley();">Вычислить</a></h3> </body> </html>
Объекты, свойства и методы
Основные понятия
Как уже отмечалось выше, JavaScript — это язык программирования, основанный на объектах. Все объекты, доступные сценарию на языке JavaScript, подразделяются на три группы:
· встроенные объекты исполняющей системы;
· объекты среды, в которой исполняется сценарий (т. е. либо объекты клиента, либо объекты сервера);
· пользовательские объекты, создаваемые сценарием в процессе его выполнения.
Пример встроенного объекта Date
<HTML> <HEAD> <TITLE>Текущая дата и время</TITLE> </HEAD> <BODY BGCOLOR=WHITE> <H1>Show date and time</H1> <SCRIPT LANGUAGE="JavaScript"> <!-- var szDate=""; var dt; dt = new Date(); szDate = "Дата: " + dt.getDate() + "." + dt.getMonth() + "." + dt.getYear(); document.write(szDate); document.write("<BR>"); document.write("Время: " + dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds()); // --> </SCRIPT> </BODY></HTML>
Здесь сценарий JavaScript создает объект Data, применяя для этого ключевое слово new, знакомое из языка С++, и конструктор Date без параметров:
var dt;dt = new Date();Создаваемый таким образом объект Data инициализируется текущей локальной датой, установленной у пользователя (а не на сервере Web, с которого был загружен соответствующий документ HTML).
В следующей строке формируется текстовая строка даты:
szDate = "Date: " + dt.getDate() + "." + dt.getMonth() + "." + dt.getYear();Значение календарного числа, номера месяца и года здесь получается при помощи методов getDate, getMonth и getYear, соответственно. Эти методы вызываются для объекта dt, содержащего текущую дату.
Текстовая строка даты выводится в документ HTML с помощью метода write, определенного в объекте document:
document.write(szDate);Заметим, что объект Date содержит также информацию о текущем времени. Эта информация извлекается для отображения с помощью методов getHours, getMinutes и getSeconds (соответственно, часы, минуты и секунды):
document.write("Time: " + dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds());Объект JavaScript
Объект JavaScript — это неупорядоченный набор свойств. Свойство, являющееся функцией, называется методом. Для доступа к свойству объекта используется синтаксис:
имя_объекта. имя_свойстваЕсли название свойства задано текстовой строкой, то доступ к свойству возможен и так:
имя_объекта [ "имя_свойства" ]Этот синтаксис используется оператором итерации for…in.
Каждое свойство состоит из названия, значения и набора следующих атрибутов:
Атрибут | Описание |
DontEnum | Свойство не должно попадать в перечисление при итерации объекта оператором for…in. |
DontDelete | Попытка программно удалить данное свойство будет проигнорирована. См. описание операции delete. |
ReadOnly | Неизменяемое свойство. Попытка программно изменить данное свойство будет проигнорирована. (Отметим, что в некоторых случаях значение свойства с этим атрибутом может быть изменено через внешнюю среду.) |
Новое свойство объекта создается просто присваиванием ему значения. Пусть, например, мы уже создали объект myBrowser , который должен описывать наш Веб-обозреватель. Это описание будет состоять из названия обозревателя ( name ) и его версии ( version ). Для создания указанных свойств мы должны включить в сценарий следующие строки:
myBrowser.name = "Microsoft Internet Explorer";myBrowser.version = "5.5";У таких свойств, созданным пользователем, все перечисленные выше атрибуты сброшены в false. В дальнейшем мы можем изменять значения этих свойств или извлекать их, например:
document.write(myBrowser.name, myBrowser.version);Существует два способа создания новых объектов в JavaScript, а именно:
- Использование инициализатора объекта.
- Использование конструктора объектов.
Создание объектов с помощью инициализатора
Этот способ позволяет одновременно создать объект и присвоить значения всем или части его свойств. Он применяется в тех случаях, когда мы создаем объект с уникальным набором свойств. Инициализатор объекта имеет вид:
{ свойство: значение [, свойство: значение ]}Здесь свойство — идентификатор, задающий имя свойства, а значение — выражение, задающее значение этого свойства.
Например, объект myBrowser из предыдущего примера может быть создан так:
var myBrowser = {name: "Microsoft Internet Explorer", version: "5.5"};Усложним этот пример, добавив еще одно свойство объекта myBrowser , которое называется options (опции обозревателя) и само является объектом:
var myBrowser = {name: "Microsoft Internet Explorer", version: "5.5", options: {enableJava: true, enableCookies: false}};Создание объектов с помощью конструктора
Этот способ применяется в тех случаях, когда мы хотим создать класс объектов с определенным набором свойств, а затем создавать новые объекты, просто указывая, к какому классу они должны принадлежать. Для этого нужно сначала создать конструктор объектов, который является функцией специального вида, а именно:
- имя функции задает имя создаваемого класса объектов;
- тело функции должно содержать присваивание начальных значений свойствам и методам создаваемого объекта.
Например, конструктор для класса объектов Browser из предыдущего примера может иметь следующий вид:
function Browser(name, version) { this.name = name; this.version = version;}Обратите внимание на использование операции this для доступа к свойствам объекта. Теперь для создания новых объектов класса Browser достаточно вызвать этот конструктор в операции new, например:
var myBrowser = new Browser("Microsoft Internet Explorer", "5.5");Вспомним теперь, что выше мы добавили свойство options объекта Browser, которое само является объектом. Перепишем приведенный пример с учетом этого свойства:
function Options(enableJava, enableCookies) { this.enableJava = enableJava; this.enableCookies = enableCookies;}function Browser(name, version) { this.name = name; this.version = version; this.options = options;}var myOptions = new Options(true, false);var myBrowser = new Browser("Microsoft Internet Explorer", "5.5", myOptions);Для доступа к свойствам свойства options используется нотация