|
ля ввода текстовой информации.
Обращаясь к свойствам перечисленных выше объектов, сценарий JavaScript может
определить различные характеристики документа HTML, такие как, например,
заголовок. Ему доступны все ссылки, размещенные в документе, а также содержимое
полей форм, определенных в документе HTML.
События, связанные с объектами
Сделаем еще одно очень важное замечание относительно объектов браузера.
С каждым таким объектом связывается определенный набор событий, обработка
которых возможна в сценарии JavaScript.
Например, с объектом window связаны события onLoad и onUnload. Первое из
этих событий возникает, когда браузер завершает загрузку окна и всех
расположенных в нем фреймов (если эти фреймы определены в окне). Второе событие
возникает, когда пользователь завершает работу с документом, закрывая окно
браузера или переключаясь на другой документ.
Сценарий JavaScript может, например, при обработке события onLoad выводить
для пользователя приветственное сообщение или запрашивать дополнительную
информацию. При завершении работы с окном (когда возникает событие onUnload)
сценарий может освобождать какие-либо ресурсы, связанные с этим окном, или
выводить сообщение на экран монитора.
С другими объектами браузера также связаны события. Мы расскажем о них при
описании этих объектов.
Объекты на базе классов, создаваемых программистом
Многочисленные книги для начинающих, посвященные языку программирования С++,
предлагают представить себе класс как структуру данных, где помимо обычных
полей определены функции-методы для работы с этими данными. Так вот, в языке
JavaScript для создания собственных классов используется прямо противоположный
метод.
Класс JavaScript создается как функция, в которой определены свойства,
играющие роль данных. Что же касается методов, то они тоже определяются как
функции, но отдельно.
Приведем конкретный пример.
Пусть нам нужно создать класс, предназначенный для хранения записи
воображаемой телефонной базы данных. В этом классе нам нужно предусмотреть
свойства для хранения имени, фамилии, номера телефона, адреса, а также
специального признака для записей, закрытых от несанкционированного доступа.
Дополнительно требуется разработать методы, предназначенные для отображения
содержимого объекта в табличном виде, как это показано на рис. 2.3.
Рис. 2.3. Просмотр содержимого записей
Прежде всего займемся созданием собственного класса с названием myRecord.
Пусть пока в нем не будет методов, мы добавим их позже.
Искомый класс создается следующим образом:
function myRecord(name, family, phone, address)
{
this.name = name;
this.family = family;
this.phone = phone;
this.address = address;
this.secure = false;
}
Нетрудно заметить, что описание нашего класса есть ни что иное, как функция
конструктора. Параметры конструктора предназначены для установки свойств
объекта при его создании на базе класса.
Свойства определяются простыми ссылками на их имена с указанием ключевого
слова this. Это ключевое слово здесь указывает, что в операторе выполняется
ссылка на свойства того объекта, для которого вызван конструктор, то есть для
создаваемого объекта.
Обратите внимание, что наш конструктор инициализирует свойство с именем
secure, записывая в него значение false. Соответствующий параметр в
конструкторе не предусмотрен, что вполне допустимо.
Как пользоваться определенным классом?
На базе этого класса вы можете создать произвольное количество объектов.
Ниже мы привели фрагмент сценария JavaScript, где на базе класса myRecord
создается два объекта rec1 и rec2:
var rec1;
var rec2;
rec1 = new myRecord("Иван", "Иванов",
"000-322-223", "Малая Большая ул., д. 225, кв. 226");
rec2 = new myRecord("Петр", "Петров",
"001-223-3334", "Большая Малая ул., д. 552, кв. 662");
rec2.secure = true;
Объекты создаются при помощи оператора new, знакомого тем, кто составлял
программы на языках С++ и Java. Здесь мы передаем конструктору параметры для
инициализации свойств создаваемых объектов.
Что же касается свойства с именем secure, то в объекте rec2 оно
инициализируется уже после создания последнего. В него записывается значение
true. Мы не изменяли свойство secure объекта rec1, поэтому в нем хранится
значение false.
Теперь наша задача - добавление в определенный нами класс новых методов с
именами printTableHead, printTableEnd и printRecord. Первые два из этих методов
выводят в документ HTML, соответственно, начальный и конечный фрагмент таблицы,
а третий - строки таблицы, отражающие содержимое записей.
В сокращенном виде новое определение класса myRecord представлено ниже:
function printTableHead()
{
. . .
}
function printTableEnd()
{
. . .
}
function printRecord()
{
. . .
}
function
|
|