WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 10 |

«тм Ричард Вагнер, Вайк Исчерпывающее руководство об основном языке сценариев Своевременные для создания полнофункциональных Web-приложений Объектно-ориентированная Исследуется связь JavaScript с другими ...»

-- [ Страница 4 ] --

ся предпринять — это либо поместить числовое значе var myString = new ние в строковое выражение, либо добавить к нему пус тую строку. Например, выражение 1300+ возвращает Обе программы начинают преобразование с левой строковое значение "1300". Вместо того чтобы каждый стороны строки и продолжают его до тех пор, пока не раз для преобразования добавлять пустую строку, мож встретится нечто, не являющееся цифрой деся но записать простую функцию:

тичной точкой (.) либо знаком плюса или минуса (+/-).

function ( После столкновения с нецифровым символом оставша number яся часть строки игнорируется. Приведенный ниже код return вернет значение 1234.01:

} var myString = new String — это общая В листинге 10.7 находится сценарий, в котором ис пользуется приведенная выше функция. Первое окно предупреждений выведет на экран в качестве типа С другой стороны, следующий код возвращает зна Number. После выполнения функции numToString() во чение NaN (Not a Number — не число), поскольку знак втором окне будет отображаться String.

доллара не является цифрой:

Листинг 10.7. Преобразование Number в String.

var myString = new String — это общая в строки. В версиях, предшествующих JavaScript 1.3, соответствующие встроенные методы отсутствовали.

Однако упомянутое действие можно было выполнить, Объект RegExp основываясь на том, как JavaScript выполняет операцию В предыдущем разделе упоминалось о возможности со сложения (+). Если во время сложения элементов вы здания функций, выполняющих вычисления и поиско ражения JavaScript встречала строку, с этого момента все вые операции. В JavaScript 1.2 появился базовый объект выражение расценивалось как строка. Например, RegExp, позволяющий выполнять регулярные выраже 35+100 возвращает цифровое значение 135. С другой ния над строками.

стороны, в результате дает строковое значе Поскольку глава 31 обеспечивает достаточно деталь ние "35100".

нос рассмотрение данной темы, не имеет смысла углуб ПРИМЕЧАНИЕ ляться в нее сейчас. В табл. 10.4 сведены свойства и При работе с объектом Number в среде, поддержи- методы объекта RegExp.

вающей JavaScript 1.3+, для преобразования в стро значения можно использовать метод toStringl).

Объект Array Обратите внимание, что JavaScript выполняет опе- Массивы являются основой практически любого совре рации сложения направо, поэтому перед преоб- менного языка программирования, и JavaScript — тому разованием выражения в строку можно сложить, ска- не исключение. Здесь имеется возможность создавать жем, два числа. Например, 10 + 20 + "40" вернет массивы и работать с ними. Массив (array) — это кон значение "3040", поскольку пара 10 + 20 вы- тейнер, содержащий элементы данных. Каждый из эле числяется до прибавления результата к строковому зна- ментов массива — отдельное значение, но все они су чению. А вот "40" + 10 + 20 выдает в качестве резуль- ществуют как часть массива. Доступ к ним возможен тата строковое значение "401020" из-за того, что левее только через сам массив. В табл. сведены все мето всех числовых значений находится строковый литерал. ды и свойства объекта Array.

Базовое подмножество языка JavaScript Часть Таблица 10.4. Методы и свойства объекта RegExp.

Тип Элемент Описание Компилирует регулярное выражение для ускорения его выполнения.

Метод Выполняет поиск совпадений в строковом параметре.

ехес() Проверяет наличие совпадений в строковом параметре.

test() Свойство RegExp.$* Представляет multiline.

Представляет lastmatch.

Представляет input.

Представляет leftContext.

Представляет rightContext.

Представляет lastParen.

Представляет совпавшие подстроки.

Проверяет, какие возможные совпадения были найдены global ignoreCase Проверяет, игнорировался ли регистр во время поиска.

Строка, в которой осуществляется поиск с помощью регулярного выражения.

input Определяет индекс, с которого начинается поиск следующей строки.

lastMatch Последние совпавшие символы.

lastParen Последняя совпавшая подстрока, взятая в круглые скобки.

Подстрока, предшествующая последнему совпадению.

multiline Проверяет, должен ли выполняться поиск во множестве строк.

rightContext Подстрока, следующая за последним совпадением.

source Шаблон строки.

Таблица 10.5 Методы и свойства объекта Array.

Тип Элемент Описание Метод concat() Соединяет элементы существующего массива. Метод появился в JavaScript 1.2.

Соединяет все элементы массива в одну строку.

рор() Удаляет последний элемент массива.

push() Добавляет элементы в конец массива.

reverse() Изменяет порядок следования элементов в массиве. Метод появился в JavaScript 1.2.

shift() Удаляет элементы в начале массива. Метод появился в JavaScript 1.2.

slice() Возвращает часть массива. Метод появился в JavaScript 1. Сортирует элементы в массиве.

splice() Вставляет и удаляет элементы из массива. Метод появился в JavaScript 1.2.

toSource() Преобразует элементы в строку с квадратными скобками. Метод появился в JavaScript toString() Преобразует элементы массива в строку.

unshift() Добавляет элементы в начало массива. Метод появился в JavaScript 1.2.

valueOf() Возвращает массив элементов, отделенных запятыми.

Свойство index Возвращает индекс совпадения в строке для массива, созданного в соответствие с регулярным выражением. Появилось в JavaScript 1.2.

input Для массива, созданного в соответствие с регулярным выражением свойство возвращает исходную строку. Появилось в JavaScript length Количество элементов в массиве.

prototype Позволяет добавлять свойства к экземплярам объекта Array. Свойство появилось в JavaScript Основные объекты языка Глава 8. PowerBuilder Несмотря на то что в строго типизированных языках 9. Paradox все значения элементов массива должны иметь оди 10. Access наковый тип, в JavaScript это необязательно. Массив может содержать данные различных типов, точно так Компоновка этой группы в массив JavaScript пока же как объект имеет свойства разных видов.

зана ниже. Особенность заключается в том, что масси вы имеют нулевую базу, т.е. индекс первого элемента ПРЕДУПРЕЖДЕНИЕ равен 0:

В JavaScript массив не является родным объектом — "JavaScript" объект появился только в JavaScript Для оп ределения массива в JavaScript требовалось создавать функцию. Заметьте, что он не будет обладать всей функциональностью родного объекта Array. "Visual Basic" "Oracle Power Objects" { "SmallTalk" = size;

for (var i = 1;

i <= size;

i++) { = null "Access" I return this Экземпляр объекта Array создается при помощи опе I ратора new и операторов, заполняющих массив элемен тами данных. Например, для упоминаемого ранее мас Для определения или доступа к какому-либо эле сива coffee код должен выглядеть следующим образом:

менту к переменной массива необходимо приписать скобки и задать индексное значение. Например, для оп var coffee = new Array () = "Ethiopian ределения массива coffee необходимо сделать следую = щее:

= "Cafe Verona" "Ethiopian = "Costa "Cafe Verona" = "Sumatra" [4] "Costa Rica" "Columbian" Альтернативой определению объекта Array может быть указание элементов данных как параметров зап Если нужно использовать один из элементов масси роса new. Следующая строка является функциональ ва внутри сценария, доступ к ним можно получить с ным эквивалентом предыдущего примера.

помошью переменной массива и которое var coffee = new представляет положение элемента внутри массива. Ото "Kenyan", "Cafe бражение на экране строки "Costa Rica", Мой любимый сорт кофе — Ethiopian Sidamo Обратите внимание, что размер массива явно не за осуществляет такая срока кода:

дается;

это не характерно для многих языков програм мирования. В JavaScript определение размера массива не Document ("Мой любимый сорт кофе — + [0] ) обязательно. Именно это свойство позволяет расширить массив, добавляя новые элементы данных. С другой Если читатель незнаком с массивами, то ближайший стороны, если необходимо, размер массива можно за эквивалент в JavaScript — это нумерованный список.

дать явно в new:

Пусть список состоит из 10 пунктов.

var coffee = new Array 1. JavaScript 2. Java Изменение размеров массива также можно осуще ствить путем определения элемента данных в позиции 3. Delphi п. Если п превышает существующее количество элемен 4. C++ тов в массиве, размер массива увеличивается до 5. Visual Basic Посмотрите на следующий пример:

6. Oracle Power Objects var = new = "Regular coffee";

7. SmallTalk = "Decaf подмножество языка JavaScript Часть II = "Cafe Mocha";

ПРЕДУПРЕЖДЕНИЕ = "Cafe au Свойство объекта Array предназначено только = "Cafe для чтения. Отсюда вывод — изменить размеры мас сива за счет присваивания нового свойству Размер массива javaDrinks будет составлять 200, length нельзя.

даже притом, что определено только 5 элементов дан ных. При доступе к неопределенным элементам возвра щается значение null.

Объект Date Выяснить размер массива поможет свойство length объекта Array. Например, если необходимо пройти по С помощью объекта Date в JavaScript можно работать всем элементам объекта Array, можно воспользоваться со значениями даты и времени. Но перед тем как при сценарием из листинга 10.8.

ступить к работе с этим объектом, необходимо разоб раться в трех важных вещах:

Листинг 10.8. Вывод на экран содержимого массива.

• В соответствие с соглашением UNIX, датой появле ри объекта Date, принимает и устанавливает значения даты и преобразует их в различные формы. В табл. 10. На рис. 10.6 показан результат.

показаны все методы и свойства объекта Date.

Как и все остальное в JavaScript, относительные зна чения даты также имеют нулевую базу. это может вызвать определенные неудобства, поскольку отсчет дней недели осуществляется от 0 до 6, а не Coffees of the от 1 до 7, и месяцев от 0 до а не от 1 до 12.

Используя в коде значения подобного рода, 2.

принимать во внимание нулевую базу.

3. Cafe Verona 4. Sumatra Однако, исключением из правил являются дни меся 5.

ца, отсчитываемые от 1 до 31 и представляющие со Columbian бой абсолютные значения.

7.

Создание объекта Date подобно созданию объектов String или Array. В сценарии эти объекты можно созда вать в любых количествах. Используя new, оп ределить объект Date можно так:

var = new Date Различные группы параметров, необходимые для РИСУНОК 10.6. Использование JavaScript для вывода на экран создания этих объектных экземпляров, перечислены в списка сортов кофе.

табл. 10.7.

Основные объекты языка Глава Таблица 10.6. Методы и свойства объекта Date.

Тип Элемент Описание Метод getDate() Возвращает месяца (от 1 до 31).

getDay() Возвращает день недели (от 0 до 6).

Возвращает год в четырех символах по местному времени.

Метод появился в JavaScript Возвращает час суток (от 0 до 23).

Возвращает миллисекунды. Метод появился в JavaScript 1.2.

Возвращает минуты в пределах часа (от 0 до 59).

Возвращает месяцы года (от 0 до getSeconds() Возвращает секунды (от 0 до 59).

Возвращает количество миллисекунд, начиная с 00:00:00.

Возвращает смещение часового пояса в минутах по отношению к GMT/UTC.

getUTCDate() Возвращает день месяца. Метод появился в JavaScript Возвращает день недели, преобразованный к универсальному времени.

Метод появился в JavaScript 1.2.

Возвращает четырехзначное представление года, преобразованное к универсальному времени. Метод появился в JavaScript Возвращает часы, преобразованные к универсальному времени.

Метод появился в JavaScript 1.2.

Возвращает миллисекунды, преобразованные к универсальному времени.

Метод появился в JavaScript 1.2.

Возвращает минуты, преобразованные к универсальному времени.

Метод появился в JavaScript 1.2.

Возвращает месяц, преобразованный к универсальному времени.

Метод появился в JavaScript 1.2.

Возвращает секунды, преобразованные к универсальному времени.

Метод появился в JavaScript 1.2.

getYear() Возвращает номер года, начиная с г.

parse() Преобразует строковые данные в миллисекунды.

setDate() Устанавливает день месяца (от 1 до Устанавливает год как четырехзначное число. Метод появился в JavaScript Устанавливает часы дня (от 0 до 23).

Устанавливает миллисекунды. Метод появился в JavaScript 1.2.

Устанавливает минуты в часе (от 0 до 59).

Устанавливает месяц в году (от 0 до setSeconds() Устанавливает секунды в минуте (от 0 до 59).

Устанавливает количество миллисекунд, начиная с 1/1/1970 00:00:00.

Устанавливает день месяца в соответствии с универсальным временем.

Метод появился в JavaScript Устанавливает год как четырехзначное число в соответствии с универсальным временем. Метод появился в JavaScript 1.2.

Устанавливает час в соответствии с универсальным временем.

Метод появился в JavaScript Устанавливает миллисекунды в соответствии с универсальным временем.

Метод появился в JavaScript setUTCMinutes() Устанавливает минуты в соответствии с универсальным временем.

Метод появился в JavaScript Устанавливает месяц в соответствии с универсальным временем.

Метод появился в JavaScript 1.2.

Базовое подмножество языка JavaScript Часть II Тип Элемент Описание setUTCSeconds() Устанавливает секунды в соответствии с универсальным временем.

Метод появился в JavaScript setYear() Устанавливает количество лет, начиная с г.

Преобразует дату в строку в соответствии с мировым форматом.

Возвращает строку даты в формате локальной системы.

toSource() Возвращает источник-объект Date. Метод появился в JavaScript 1.3.

Возвращает дату и время как строку в соответствии с местным временем.

Возвращает данные и время как строку в соответствии с мировым временем Метод появился в JavaScript 1.2.

UTC() Преобразует значения с разделителями-запятыми в миллисекунды даты по valueOf() Возвращает эквивалент объекта Date в миллисекундах. Метод появился в JavaScript Свойство prototype Свойство, позволяющее добавлять методы и свойства к объекту Date.

Свойство появилось в JavaScript Таблица 10.7. Параметры, необходимые для создания экземпляра объекта Date.

Параметр Описание Пример Отсутствие параметров Создает объект с текущими датой и временем. var today = new гггг Создает объект с указанными датой (дд — день, гггг — год) var someDate = new Date и временем (чч — часы, мм — минуты, — секунды). ("September 27, 2000";

При этом все пропущенные значения считаются нулевыми.

гг, мм, дд Создает объект с указанными датой из набора var someDate = целочисленных значений (гг — год, мм — месяц, дд — день) 1, 0) гг, мм, дд, чч, мм, Создает объект с указанными датой и временем из набора var someDate = целочисленных — год, мм — месяц, день, new Date(00, 7, 24, 6, 29, 50) чч — часы, мм — минуты, — секунды). При этом все пропущенные значения считаются нулевыми.

После создания объекта можно использовать все • будет возвращать название меся методы для получения или установки значения даты.

Например, для возврата текущей даты следует записать:

• будет возвращать текущее численное значение дня недели.

var today = new Date result = • getCalendarDay() будет возвращать название дня не Для изменения месяца, определенного в объекте appt дели.

типа Date потребуется записать:

В листинге 10.9 приводятся определения для каждо var appt = new Date го из прототипов перечисленных методов. Данный ли result = (7) стинг послужит наглядным примером сохранения обще употребительных функций во внешней библиотеке Раньше упоминалось, что значения даты с нулевой базой осложняют получения даты. Эту труд- JavaScript или в исходном файле, который можно заг рузить при помощи атрибута src дескриптора Объект Math объявления методов сценарий создает объект Date и генерирует используя комби- С целью эффективной организации математических вы нацию методов (см. рис. 10.7). числений JavaScript инкапсулирует большое число ма Поскольку JavaScript является приложением, работа- тематических констант и процедур в единый объект ющим в среде World Wide Web, в нем определены мето- Math. Он в некоторой степени отличается от других ды, работающие с часовыми зонами. базовых объектов. Во-первых, можно выполнять базо возвращает размер различия в минутах между клиентс- вые арифметические вычисления (сложение, вычитание, ким компьютером и GMT (Greenwich Mean Time - умножение, за пределами объекта Math. До время по Гринвичу). Например, я сейчас нахожусь в во- тех пор пока не потребуются сложные математические Базовое подмножество языка JavaScript Часть II использование данного объекта будет чрезвы- имена рассматриваемых свойств записаны символами верхнего регистра.

редким.

Во-вторых, хотя и можно создавать экземпляры объектов String, Array, Date при помощи new, все рав Объект Boolean но работа продолжается с базовым экземпляром Math.

Подобное качество позволяет расценивать этот объект Значения логического типа являются час как созвучный navigator, который никогда не создается тью любого языка программирования. Boolean, "на лету". Именно поэтому на объект Math ссылаются впервые появившийся в JavaScript 1.1, применяется для как на статический (static) объект. преобразования значений, не относящихся к логическо Свойства объекта Math — ни что иное как последо- му типу, в значения логического типа. В конечном итоге вательность общих математических констант. Свойства с этим объектом можно работать как с обычным значе и методы этого объекта сведены в табл. 10.8. Обратите нием логического типа (true или false). Объект Boolean внимание на регистр в именах констант. Несмотря на можно создать, прибегнув к уже знакомому оператору то что практически все имена свойств JavaScript запи- new:

сываются в нижнем или же в смешанных регистрах, var = new Таблица 10.8. Методы и свойства объекта Math.

Tun Элемент Описание Метод abs() Возвращает абсолютное значение.

acos() Возвращает значение арккосинуса для аргумента, выраженное в радианах.

asin() Возвращает значение арксинуса для аргумента, выраженное в радианах.

atan() Возвращает значение арктангенса для аргумента, выраженное в радианах.

atan2() Возвращает значение арктангенса для частного от деления аргументов, выраженное в радианах.

ceil() Возвращает целое число, большее или равное переданному значению.

Косинус для переданного значения.

ехр() Возвращает константу Эйлера для степени, переданной в качестве значения.

floor() Целое число, меньшее или равное переданному значению.

Натуральный логарифм по основанию е.

Максимальное число из двух переданных значений.

min() Минимальное число из двух переданных значений.

pow() Результат возведения первого переданного в качестве аргумента числа в степень второго.

Random() Возвращает случайное число между 0 и 1. Метод появился в JavaScript round() Возвращает значение, округленное до ближайшего целого.

sin() Возвращает синус переданного числа, выраженный в радианах.

Квадратный корень переданного числа.

Возвращает тангенс переданного числа, выраженный в радианах.

toSource() Копия объекта. Метод был добавлен в JavaScript 1.3.

Строковое представление объекта.

Свойство Е Константа Эйлера LN2 Натуральный логарифм 2 (0.6931471805599453).

LN10 Натуральный логарифм (2.302585092994046).

LOG2E Логарифма Е по (1.4426950408889633).

LOG10E Логарифм Е по основанию - PI Число Пи Квадратный корень 0. SQRT2 Квадратный корень объекты языка Глава Параметр initialValue определяет начальные установ- ходимость выполнения множества преобразований ки параметр принимает значение false, О, строк в числа.

или пустую строку или вообще пропущен, Результат выполнения сценария показан на рис.

принимается значение по умолчанию, равное false. В противном случае — true.

В табл. 10.9 приведены методы и свойства объекта Boolean.

Highway is Объект Number Объект Number, поддерживаемый в JavaScript и сле дующих версиях, служит для хранения числовых зна чений наподобие того, как объект String предназначен для хранения строковых значений. Однако в действи тельности он используется гораздо реже. Этот объект применяется, если необходимо получить доступ к оп ределенным значениям констант, таким как максималь но или минимально числа, плюс или минус бесконечность или нечисловые значения (NaN).

Упомянутые значения реализованы в виде свойств объекта Number. В табл. приведены методы и свой РИСУНОК 10.9. Использование объекта Number.

ства объекта Number.

Как и другие базовые объекты, экземпляры объекта Number в сценарии создаются при помощи оператора Объект Function new со следующим синтаксисом:

Последний базовый объект, появившийся в JavaScript var = new — это Function. Он позволяет определить строку во Зачастую объекты Number создаются, когда к ним время выполнения и компилировать ее как функцию.

требуется добавить новые свойства. Например, листинге Рассмотрим синтаксис объявления объекта Function.

содержит сценарий, демонстрирующий особую = new полезность объектов Number. Здесь уменьшается необ 10.9. Методы и свойства объекта Boolean.

Тип Элемент Описание Метод Возвращает строковое представление простейшего значения Boolean, хранящегося объекте.

Если в объекте содержится true, возвращается строка "true", а если false "false".

Свойство prototype Это свойство позволяет добавлять методы и свойства в объект Boolean.

Таблица Методы и свойства объекта Number.

Тип Элемент Описание Метод Возвращает строковое представление объекта Number. Метод появился в JavaScript Возвращает строковое представление заданного объекта Number.

Возвращает значение объекта Number как числовой тип данных.

Максимальное число MIN_VALUE Минимальное число (5е-324).

NaN Специальное нечисловое значение (NaN).

Специальное значение бесконечности, возвращаемое в случае переполнения.

Специальное значение, представляющее отрицательную бесконечность;

возвращается в случае переполнения.

prototype Позволяет добавлять новые свойства и методы к объекту Number.

Базовое подмножество языка JavaScript Часть II Листинг 10.10. Создание объекта Number вместо выполнения преобразования строк в числа.

Следует учесть, что несмотря на внешнее подобие Резюме объекта Function и стандартной функции JavaScript function), все же они существенно отличаются друг от К базовым объектам языка следует относиться как к друга. Имя объекта Function рассматривается как пере- важнейшим винтикам рабочего механизма JavaScript, менная, представляющая текущее значение функции, поскольку большая часть работы выполняется как раз определенной в строке new Function, в то время как имя внутри их конструкций. Кроме того, не забывайте, что стандартной функции JavaScript переменной не являет- именно базовые объекты стандартизируются в соответ ся — это именно имя функции. ствие со спецификацией ECMAScript.

Глава была посвящена методике использования ба зовых объектов языка и описанию особенностей из фун Трансляция объекта Function выполняется при каждом кционирования в различных версиях браузеров. В сле его использовании. Неудивительно, что их выполнение дующей главе будут рассматриваться примеры приме происходит гораздо медленнее по сравнению с нор нения массивов и способы создания пользовательских мальными функциями JavaScripf.

объектов.

Объект Function можно использовать как обработчик событий. Рассмотрим пример:

= new = Создание объектов JavaScript В ГЛАВЕ • Создание объектов • Создание экземпляров объектов • Работа с экземплярами объектов • Создание составных объектов • Динамическое создание объектов • Расширение экземпляров объектов function Данная глава является логичным продолжением пре proper = дыдущей. В главе 9 мы много говорили об основах proper ty2 = объектно-ориентированного программирования, а в гла = ве 10 — о встроенных объектах языка JavaScript. Но = = если на этом остановиться, возможности JavaScript мо = function гут показаться весьма скудными. Не следует упускать из виду создание собственных пользовательских объектов.

Простота нестоящей структуры конструктора доста Именно этой теме и посвящается данная глава.

точно очевидна. Сначала потребуется присвоить имя самому методу. Имя функции послужит именем объек Создание объектов тного типа. Если объект создается с целью представле ния, скажем, счета-фактуры, назовите его invoice. Иног Пользовательские объекты JavaScript тесно связаны с да мне встречались программисты, которые в названиях массивами. Массивы — средство структурирования дан конструкторов использовали глагол;

получалось что-то ных в контейнере. Какими бы мощными не были бы наподобие Подобная практика может при массивы, они не в состоянии удовлетворить все запро вести к снижению удобочитабельности кода, т.к. свой сы разработчиков. Несмотря на то что массивы хранят ство объекта будет выглядеть как-то так:

данные, они не могут хранить поведение.

Как обсуждалось в главе 9, объект содержит и дан ные, известные как свойства (properties), и поведение, Даже еще хуже, если среди методов объекта присут известное как методы (methods). На первый взгляд мо ствует код приобретет просто "шикарный" вид:

жет показаться, что массив — почти то же самое, что и объект со свойствами, однако есть один нюанс: массив не хранит информацию о способе своей реакции на ме А вот в случае применения существительных для тоды. Наша задача — создать объект, инкапсулирующий именования можно надеяться на гораздо более изящный элементы данных и обеспечивающий реакцию на вызов вид:

методов.

myDate = Для создания объекта JavaScript необходим конст руктор (constructor). Конструктор — это специальная функция JavaScript, которая определяет вид объекта и Следующий шаг заключается в добавлении парамет его поведение. Сам по себе конструктор не создает ров в функцию для всех свойств объекта. Следуя тако объекты. Вместо этого он обеспечивает шаблон вида му подходу, при реализации объекта значения свойств реализованного объекта. (Создание экземпляра объекта передаются в функцию в форме параметров.

называется реализацией (instantiating) объекта.) Базовая Третьим шагом будет присвоение свойствам объек структура реализованного объекта выглядит так:

там значений входных параметров. Ключевое слово this Базовое подмножество языка JavaScript Часть II Rating:

очень удобно;

оно используется для представления + объекта в момент определения свойств.

objWindow.

Четвертый шаг связан с определением методов, ко торыми будет обладать объектный тип. В то время как I свойствам присваиваются значения параметров конст Несмотря на то что этот код находится за предела руктора, методы создаются в виде функций за предела ми конструктора, можно рассмотреть его как часть опи ми конструктора и присваиваются определениям мето сания объекта. Следовательно, в данном случае придется да объекта.

прибегнуть к ключевому слову this.

Предположим, что необходимо создать пользова Далее в конструктор добавляется новый вход для тельский объект, применяемый для хранения информа метода:

ции о любимых книгах. В частности, хотелось, чтобы в нем присутствовало название книги, имя автора (или function author, ISBN, subject, авторов), ISBN, предмет, которому посвящена книга, и rating) { = присвоенный ей внутренний рейтинг. Конструктор = author;

можно определить следующим образом:

= ISBN;

= subject;

function author, ISBN, subject, = rating;

rating) = show;

// Новый метод отображения = title;

i = author;

= ISBN;

Обратите внимание на две детали, относящиеся к = subject;

описанию метода Во-первых, имя объектного = rating;

метода совпадает с соответствующей внешней функци ей, чего быть не должно. Для большей читабельности Кроме того, хотелось бы добавить метод одни разработчики используют идентичные имена, а который будет отображать на экране информацию об другие — добавляют внешнюю функцию, содержащую объектах. Создадим функцию, размещенную за преде в своем имени еще и имя объекта, например, book_ лами конструктора:

Во-вторых, в конструкторе записывается лишь function { только имя внешней функции, без круглых скобок.

= В ранних версиях Netcsape Navigator описание ме тода требовалось располагать до конструктора, посколь ку ссылки выполнялись сверху вниз. В Navigator 3+ такого уже нет. Размещение метода относитель но метода конструктора в JavaScript роли не играет.

Title: + + Упомянутый факт дает возможность улучшить чи + табельность кода, разместив описания методов непо + средственно под конструктором. Кроме того, стоит по + местить набор функций в комментарий, чтобы они вос + + принимались как целостная конструкция. В листинге + 11.1 приводится полное описание объекта Book.

Листинг 11.1. Определение объекта Book.

значения свойствам объекта, не следует забывать об этом экземпляров факте. Если требуется обеспечить постоянный объект, Для задействования объекта, объявленного в конст- обработка должна быть переложена на сторону сер рукторе book() необходимо создать его экземпляр. Для вера.

этих целей используется оператор new, синтаксис кото ПРИМЕЧАНИЕ рого выглядит так:

Постоянство, или устойчивость (persistence), — это = new весьма распространенное слово в предметной облас ти, связанной с объектами. В двух словах, это озна чает способность создавать экземпляры объектов и При помощи new объект Book создается следующим сохранять состояние объектов так, что при следую образом:

щем доступе к объекту он восстанавливается в сохра ненном состоянии.

= new "Dietrich Клиентская часть JavaScript не обеспечивает свойства 5) постоянства для объектов.

Теперь на это объект можно ссылаться из любого В листинге приведен код, реализующий созда места кода через переменную Экземпляр будет ние экземпляров объекта Book и вызывающий метод храниться в памяти, пока страница загружена в браузе show(). На рис. показан результат загрузки данной ре. После перехода на следующую страницу или закры страницы в браузер.

тия браузера, экземпляр объекта исчезает. Присваивая Листинг 11.2. Использование объектного конструктора Book.

4 тм Ричард Вагнер, Вайк Исчерпывающее руководство об основном языке сценариев Своевременные для создания полнофункциональных Web-приложений Объектно-ориентированная Исследуется связь JavaScript с Book Objects Object Description

Title: of Discipleship Select a Author:

ISBN;

1-57521-118- Работу с экземпляром объекта можно продолжать сразу же после его создания — присваивать ему значе Assign a rating:

ния или обращаться к любому из его методов. Кроме того, можно связать объекты с элементами пользова но ранее, и создать пять его экземпляров:

= new of Click to assign:

"Dietrich "Grace", 5) fkBook = new Once and Future

Click to show:

iaBook = new Agenda", "Robert Thriller", 2} В самой форме следует использовать объект select с элементами

- одну для установки рейтинга, а другую — для вывода function { на экран информационной формы по конкретной кни selectedBook = ге. Код для реализации формы приводится ниже. Ре зультат загрузки кода в браузер показан на рис.

Создание объектов JavaScript Глава selectedBook = объекта bookList вместе с его же свойством selectedlndex.

= Сейчас имя объекта Book содержится в переменной selectedBook, однако JavaScript воспринимает его как selectedlndex] строковое значение, а вовсе не как ссылку на экземп ляр объекта. Поэтому для преобразования переменной в объектную ссылку используется метод eval().

В последней строке метода свойству rating перемен ной selectedBook присваивается значение вновь выбран ного рейтинга, содержащееся в объекте Book Objects a Для проверки типа переменной во время выполнения Assign a rating:

метода можно использовать оператор typeof. Напри мер, следующий код отображает окно сообщений, вы ra водящее тип переменной selectedBook:

Click to Метод использует ту же технологию для вызова метода объекта function { selectedBook = РИСУНОК 11.2. Форма Book.

selectedBook = Посмотрев внимательнее на код, несложно заметить, что метод получает значение выбранной опции bookList и присваивает его переменной selectedBook. Для полу- Листинг 11.3 содержит полный исходный код дан чения этого значения используется свойство options ного примера.

Листинг 11.3. Исходный код для примера Book Objects

Select a book:

Assign a rating:

в восприятии. Разрабатываемый объект должен позво Создание составных объектов лять "на лету" добавлять кнопки в соответствующий Объекты, с которыми мы имели дело до этого момен- массив, помещать buttonSet в любой объект Document та, относятся к категории простых объектов. Они обла- и по заданным условиям отображать отдельные кноп дают одним уровнем свойств и методов. Следующий ки. Конструктор объекта buttonSet показан в листинге пример, посвященный созданию объекта buttonSet, с одной стороны более быстр, а с другой — более сложен Создание пользовательских объектов JavaScript Глава Листинг Конструктор объекта

= = = // куда в элементы.

// Любое выполненное отразите в = return this ) Метод объекта buttonSet function { var spacelnt;

(var i = index >= i++) { { + [i] + // Если требуется, добавляем пробелы spacelnt = 0 + "Microsoft Internet Explorer") { spacelnt = spacelnt + 3 ;

I != 0) { + spacelnt + = Ext;

Помимо прочих, JavaScript поддерживает составные = объекты, свойства которых сами могут быть объектами.

= project;

Составные объекты дают возможность более логично = структурировать код. Это гораздо лучше, нежели пы- I таться втиснуть все данные в одноуровневый объект.

Совершенно аналогично определите объект project, Предположим, что требуется отслеживать информа установив объект client в качестве свойства:

цию о сотрудниках, их текущих проектах и клиентах.

function client, DevTool) { Очевидно, что адрес клиента не должен быть частью = описания объекта сотрудника. В этом смысле суще = ственную в структуризации данных вокруг трех = DevTool;

отдельных, однако связанных сущностей — сотрудник, } проект, клиент — окажут составные объекты JavaScript.

function Address, City, State, Zip) { В конструкторе employee определите основные свой ClientName;

ства (имя, телефон, адрес электронной почты) и метод Address = Address;

Для представления связанной с = City;

информации потребуется определить свойство = = project в объекте employee. Определение выполняется таким же путем, как и для обычного свойства, за чением того, что параметр project является ссылкой на Создаваемый сейчас метод де объект, а не на строковое значение:

монстрирует способ ссылки на эти вложенные объекты.

Функциональность этого метода связана с отображения function нового окна для представления краткой информации о Ext, project) = FirstName;

сотруднике — список всех свойств объекта employee и this. LastName = LastName;

других объектов внутри него.

= Базовое подмножество JavaScript Часть { = Summary Information Sheet + + + + Information Phone: + + : + + + + jwindow. document Information Project: this + + + + this. Client. City + + + + this.Project.Client.zip + Tool Used: + Ссылка на дочерний объект выполняется в соответ- ям, сначала потребуется создать экземпляр CoastTech ствие с точечной нотацией. Таким образом, на адрес кли- объекта client и только затем заняться созданием про ента можно сослаться через екта Coastal.

Точечная нотация позволяет легко и просто отследить После создания экземпляров объектов обратитесь к код с момента определения пути для используемых для отображения окна, пока методов и свойств, поскольку предполагает указание занного на рис.

пути к тому или иному методу либо свойству. Совер- В листинге 11.5 показан исходный код для этого шенно несложно добраться до родительских объектов примера.

(имена которых находятся слева перед первой точкой), проходя через множество дочерних до тех пор, пока не встретится искомый метод или свойство.

Employee Summary Information Sheet Как только определены конструкторы для каждого Turner из объектных типов, приступайте к созданию экземп ляров employee, project и client.

Home Phone:

CoastTech = new Ext: "100 Beacon Hill", "Boston", Coastal = new CoastTech, Allen = new Project Information "100", Current Client Coastal Techonology Параметр project в определении объекта сотрудни ка и параметр client в определении объекта проекта - Address: Beacon далеко не строки;

они — суть имена вновь созданных City, State, Zip: Boston, MA объектов. Обязательно примите во внимание порядок Development Tool Used: JavaScript создания объектов. Поскольку объект Allen использует объект проекта Coastal в качестве параметра, создание экземпляра Coastal должно происходить в первую оче редь, иначе возникнет ошибка. По тем же соображени РИСУНОК 11.3. Страница с краткой информацией о сотруднике.

Листинг 11.5. Пример использования объектов employee, client и project.

4 тм Ричард Вагнер, Вайк Исчерпывающее руководство об основном языке сценариев Своевременные для создания полнофункциональных Web-приложений Объектно-ориентированная Исследуется связь JavaScript с ентированные среды программирования позволяют со Динамическое создание объектов здавать экземпляры "на лету".

Возможность создания объектов непосредственно в коде JavaScript позволяет создавать объекты "на лету", существенно расширяет возможности разработчика. Во однако все же с рядом определенных ограничений.

всех рассмотренных ранее примерах объекты создава- Сначала планировалось создать обобщенную функцию, лись оператора new во время загрузки окна. которая бы создавала экземпляры при каждом ее вызо А какие же действия потребуется предпринять для со- ве. Если замысел увенчается успехом, исчезнет необхо здания объектов во время выполнения? Объектно-ори- димость в использовании операторов new, и объекты Базовое подмножество языка JavaScript Часть II empList[i] = new можно будет создавать на основе информации, введен LastName, HomePhone, Ext, ной пользователем. Идея метода выглядит приблизи тельно так:

Используя приведенный выше метод, можно созда function вать экземпляры объектов, базируясь на вводе пользо { вателя и динамическом создании объекта за счет вызо = new ва Например, при помощи формы, представленной на рис. 11.4, пользователь может вво В идеальном случае метод должен был создавать дить основную информацию о сотрудниках. После щел экземпляр объекта и присваивать ему имя на основе чка на кнопке Add создается новый экземпляр объекта. В значения параметра ObjectName. К сожалению, попыт листинге показан исходный код для данной формы.

ка успехом не увенчалась. JavaScript не позволяет име ни экземпляра объекта быть переменным. Вместо этого в качестве имени объекта используется ObjectName. На пример, если Frank определен как объектная ссылка, то следующее выражение будет полностью корректным:

Dynamic Object Creator function LastName) ( Frank = new Несмотря на невозможность динамического имено вания реализованных объектов, объект можно создать как элемент массива-контейнера. Это означает, что мож но предусмотреть массив который будет хранить все созданные объекты employee. Таким обра зом, можно изменить метод использовав вместо него что-то наподобие:

function LastName, Ext, { РИСУНОК Динамическое создание объектов.

Листинг 11.6. Динамическое создание объектов.

4 тм Ричард Вагнер, Вайк Исчерпывающее руководство об основном языке сценариев Своевременные для создания полнофункциональных Web-приложений Объектно-ориентированная Исследуется связь JavaScript с

Pick Your Favorite Songs From the List:

The songs selected included:

• Breakfast at Tiffany's (Deep Blue

Объект Lock Данный объект используется для обеспечения блокиро вок других объектов. Как упоминалось ранее, этот про Pick Your Favorite Songs From the List:

цесс обеспечивает защиту доступа к данным со стороны 1979 (Smashing Pumpkins) at Tiffany's (Deep Blue Something) определенных экземпляров в случае, когда предполага Cry (Seal) (Jars of Clay) ется только единственный поток операций. Наглядный пример тому — счетчик. К услугам прибегают, ска жем, тогда, когда необходимо посчитать количество клиентов или запросов, пришедших за фиксированный промежуток времени. У объекта есть три метода и един ственное свойство, перечисленные в табл. 12.10.

Объект File Вплоть до сего момента рассматривались только своего РИСУНОК 12.8. Список с возможностью множественного выбора рода "автоматические" объекты. Под "автоматическими" перед передачей формы.

объектами подразумеваются только такие, к созданию Листинг 12.5. Код со стороны сервера для которых в среде SSJS приводит запуск самого сервера, списка выбранных песен.

получение запросов, поддержка проектов и блокировок. Первый объект, выходящий за пределы очерченной области, — это объект File.

Page Базовое подмножество JavaScript Часть II Объект File позволяет считывать и записывать дан- этот метод передается параметр mode, который может принимать одно из значений, перечисленных в табл.

ные в файл, хранящийся в файловой системе сервера.

Команды для чтения и записи в файл относятся к стан- Возможно, вы обратили внимание на необязатель дартным функциям большинства языков программиро- ный параметр используемый для открытия файлов в вания. Если доводилось использовать другие языки про- двоичном режиме только в среде операционной системы Windows. После завершения работы с файлом граммирования, особых неудобств испытывать не придется. Данный объект имеет всего одно свойство и потребуется вызвать метод close() для его закрытия.

несколько методов, краткое описание которых приво СОВЕТ дится в табл.

Несмотря на то что объект File не имеет Новые экземпляры объекта File создаются при помо и возможности блокировки оказываются дос щи оператора new. Рассмотрим один пример:

тупными через объекты Project и Server.

var = new Листинг 12.6 демонстрирует один из ис Поскольку объект File имеет дело с файловой сис пользования файлов. код предназначен темой сервера, параметр path должен содержать полный для регистрации передавших форму. При путь к файлу, но не URL. После создания экземпляра каждой передаче формы серверный сценарий открыва объекта, его потребуется открыть для подготовки либо ет файл contlog.txt и записывает в него содержимое всех к считыванию, либо к записи, вызвав метод В полей, используя запятые в качестве разделителей.

Таблица Встроенные методы и свойства объекта Lock.

Тип Метод Описание Метод isValid() Проверяет допустимость конструкции объекта Lock.

lock() Блокирует код на период выполнения манипуляций с данными, которые должны осуществляться в эксклюзивном режиме.

Освобождает ранее заблокированный код.

Свойство prototype Позволяет добавлять новые методы и свойства в объект Lock.

Таблица Свойства и методы объекта File.

Тип Элемент Описание Метод Преобразует число, представленное в одном байте, в строку.

clearError() Очищает состояние ошибки для файла.

Закрывает файл.

eof() Определяет, находится ли указатель в конце файла.

error() Возвращает текущее состояние ошибки.

exists() Определяет, существует ли определенный файл.

Записывает в файл содержимое внутреннего буфера.

getLength() Выдает длину файла.

getPosition() Выдает текущую позицию указателя в файле.

ореп() Открывает файл для доступа.

read() Считывает данные из файла в строку.

Считывает заданное количество байтов и возвращает их значение.

Считывает текущую строку файла в строковую переменную.

setPosition() Устанавливает текущую позицию в файле.

stringToByte() Преобразует первый число, находящееся в строке, в значение, представленное байтом.

Записывает данные в файл.

Записывает один байт данных в файл.

Записывает данные в файл с добавлением кода возврата каретки.

Свойство prototype Позволяет добавлять методы и свойства в объект File.

Серверная часть JavaScript Глава Таблица 12.12. Параметры метода ореп() для объекта File.

Mode Описание а[Ь] Открывает существующий файл для добавления нового текста. Если файл не существует, он создается.

а+[Ь] Открывает существующий файл для чтения и записи. Если файл не существует, возвращается false.

Указатель устанавливается в конец файла.

Открывает существующий файл для чтения. Если файл не существует, возвращается false.

r+[b] Открывает существующий файл для чтения и записи. Если файл не существует, возвращается false.

Указатель устанавливается в начало файла.

w[b] Открывает новый файл для записи. Если файл уже существует, происходит его перезапись.

w+[b] Открывает новый файл для чтения и записи. Если файл уже существует, происходит его перезапись.

Листинг 12.6. Работа с файлами через объект File.

< ti / ti tle> if (request. null) ( cLog = new if true) + + + +


Please provide the contact

отправлять сообщения через почтовый сервер. Как и Подобно объекту File, SendMail создается с исполъ при помощи этого объекта можно со- зованием оператора new:

страницы приложения, которые предоставляли var myMessage = new SendMail Базовое подмножество языка JavaScript Часть II Таблица Методы и свойства объекта SendMail.

Тип Элемент Описание Метод Возвращает целочисленное представление кода ошибки, возникшей во время сообщения.

Возвращает строку, связанную с кодом ошибки, возникшей во время отправки сообщения.

Отправляет электронную почту.

Свойство Разделенный запятыми список адресатов, получаемых скрытую точную копию сообщения.

Body Основной текст сообщения.

Сс Разделенный запятыми список адресатов, явно получаемых точную копию Errorsto Имя пользователя, которому будут адресоваться сообщения об ошибках при Значение по умолчанию совпадает со значением свойства From.

From Обязательное имя отправителя сообщения.

Organization Название компании-отправителя или любая информация о ней.

prototype Позволяет создавать новые свойства и методы для объекта SendMail.

Replyto Имя пользователя, используемое вместо свойства From в качестве адреса, куда будет отправляться ответное сообщение.

Имя хоста или IP-адрес SMTP.

Subject Предмет сообщения.

То Список получателей сообщения, разделенный запятыми время как большинство действий реализуется через ме Объекты тоды. Таблица содержит краткие описания всех Одно из преимуществ серверной части JavaScript заклю- методов. Если до этого приходилось работать с базами чается в возможности взаимодействия с базами данных. данных в других языках программирования, несложно Как упоминалось ранее, вызывает SSJS, для заметить, что JavaScript обладает практически всеми чего, собственно, последний и используется. В настоя- средствами взаимодействия с базами данных.

щий момент LiveWire относится к функциональным Объект DbPool средствам доступа к базам данных в среде SSJS. Чуть ниже будут рассматриваться базовые объекты, обеспе- Объект DbPool, появившийся в Netscape Enterprise чивающие упомянутый доступ. Server 3, очень напоминает объект Database с тем лишь отличием, что этот объект представляет целиком весь Объект Database пул подключений к базе данных. После создания тако Объект Database инкапсулирует всю функциональность го пула, из него можно вытаскивать необходимые со взаимодействия с реляционными базами данных. У дан- единения. В табл. 12.15 представлены методы и свой ного объекта определено всего лишь одно свойство, в то ство данного объекта.

Таблица 12.14. Методы и свойства объекта Database.

Тип Элемент Описание Метод Начинает транзакцию SQL.

Выполняет текущую транзакцию SQL.

connect() Подключает приложение к заданной базе данных.

Возвращает true, если связь между приложением и базой данных установлена.

cursor() Создает объект Cursor для заданной SQL-оператора SELECT.

disconnect() Разрывает связь с базой данных.

Выполняет заданный оператор SQL. Используется для операторов SQL, которые не возвращают курсор.

Главный код ошибки, возвращаемый сервером баз данных или ODBC.

Серверная JavaScript Глава Тип Элемент Описание Сообщение, соответствующее главному коду ошибки, возвращаемое сервером баз данных или ODBC.

minorErrorCode() Вторичный код ошибки, возвращаемый библиотекой поставщика.

Сообщение, соответствующее вторичному коду ошибки, возвращаемое библиотекой поставщика.

rollbackTransaction() Выполняет откат текущей транзакции SQL.

SQLTable() Генерирует HTML-таблицу для вывода на экран результатов запроса SELECT.

storedProc() Создает объект Stproc и запускает выбранную хранимую процедуру.

ProcArgs() Создает прототип хранимой процедуры DB2, ODBC или Sybase.

Возвращает строку, представляющую заданный объект.

Свойство prototype Позволяет добавлять методы и свойства к экземплярам объектов Database.

Таблица 12.15. Методы и свойства объекта DbPool.

Тип Элемент Описание Метод Подключает пул приложения к заданной базе данных.

Возвращает true, если пул подключен к базе данных.

Захватывает доступное соединение из пула.

DbPool() Создает пул соединений с базами данных.

Закрывает все соединения с базами данных в пуле.

Главный код ошибки, возвращаемый сервером баз данных или ODBC.

Сообщение, соответствующее главному коду ошибки, возвращаемое сервером баз данных или ODBC.

minorErrorCode() Вторичный код ошибки, возвращаемый библиотекой поставщика.

Сообщение, соответствующее вторичному коду ошибки, возвращаемое библиотекой поставщика.

Создает прототип хранимой процедуры DB2, ODBC или Sybase.

Возвращает строку, представляющую заданный объект.

Свойстзо prototype Позволяет добавлять методы и свойства к экземплярам объектов DbPool.

Объект Connection Объект Cursor Объект Connection появился в Netscape Enterprise Server Данный объект создается за счет вызова методов 3 и представляет собой связь, взятую из связей или Поскольку с базами данных. Создается этот объект с помощью запрос к базе данных требует вернуть курсор, этот вызова метода (). В таблице объект содержит ссылку на строки, возвращаемые в ре представлены методы и свойство данного объекта. зультате выполнения запроса. В таблицу 12.17 сведены методы и свойства этого объекта.

Таблица 12.16. Методы и свойство объекта Connection.

Тип Элемент Описание Начинает транзакцию SQL.

Метод Выполняет текущую транзакцию SQL.

Возвращает true, если связь между приложением и базой данных установлена.

Создает объект Cursor для заданной SQL-оператора SELECT.

Выполняет заданный оператор SQL. Используется для операторов SQL, которые не возвращают курсор.

Главный код ошибки, возвращаемый сервером баз данных или ODBC.

подмножество языка JavaScript Часть II Описание Тип Сообщение, соответствующее главному коду ошибки, возвращаемое сервером баз данных или ODBC.

Вторичный код ошибки, возвращаемый библиотекой поставщика.

Сообщение, соответствующее вторичному коду ошибки, возвращаемое библиотекой поставщика.

release Освобождает соединение, возвращая его в пул.

Выполняет откат текущей транзакции SQL.

SQLTable() Генерирует HTML-таблицу для вывода на экран результатов запроса SELECT.

storedProc() Создает объект Stproc и запускает выбранную хранимую процедуру.

Возвращает строку, представляющую заданный объект.

Свойство prototype Позволяет добавлять методы и свойства к экземплярам объектов Database.

Таблица 12.17. Методы и свойства объекта Cursor.

Тип Элемент Описание Метод Закрывает курсор и освобождает занимаемую им память.

Принимает проиндексированную позицию столбца и возвращает соответствующее имя столбца.

Возвращает количество столбцов в рамках курсора.

deleteRow() Удаляет текущую строку таблицы.

Вставляет новую строку в таблицу.

Перемещает экземпляр объекта Cursor из текущей строки на следующую.

Обновляет текущую строку указанной таблицы.

Свойство columnName Представляет имена столбцов, возвращаемых курсором.

prototype Позволяет добавлять методы и свойства к экземплярам объекта Cursor.

Объект Resultset полняет хранимую процедуру в базе данных, к которой Данный объект (результирующий набор) создается пос- получен доступ. Убедитесь, что вызов close() ле вызова метода В нем сохраняются производится по завершении выполнения процедуры. В результаты выполнения хранимой процедуры. В случае табл. 12.19 перечислены методы и свойства объекта.

выполнения процедур в базах данных DB2, Oracle, Объект BLOB Sybase и ODBC объект Resultset возвращается для каж дого оператора SELECT. В сервере Infomix будет воз- Последний базовый объект, достойный рассмотрения, вращаться только один объект Resultset. В табл. обеспечивает поддержку работы с Binary Large Objects перечислены методы и свойства данного объекта. (большие двоичные объекты, BLOB) в базе данных.

Объект не обладает свойствами, лишь только двумя Объект Stproc методами (см. табл. 12.20).

Объект Stproc создается в результате вызова методов Connection.storedProc() или и 12.18. Методы и свойство объекта Resultset.

Тип Элемент Описание Метод close() Закрывает результирующий набор и освобождает занимаемую им память.

Принимает проиндексированную позицию столбца и возвращает соответствующее имя столбца.

columns() Возвращает количество столбцов в результирующем наборе.

next() Перемещает экземпляр объекта Resultset из текущей строки на следующую.

Свойство prototype Позволяет добавлять методы и свойства к экземплярам объекта Resultset.

Серверная часть JavaScript Глава Таблица Методы и свойства объекта Stproc.

Тип Элемент Описание Метод close() Закрывает экземпляр хранимой процедуры, освобождая занимаемую им память.

Возвращает количество выходных параметров процедуры.

outParameters() Возвращает значение определенного выходного параметра.

Создает новый объект Resultset.

Выдает значение возврата хранимой процедуры.

Свойство prototype Позволяет добавлять методы и свойства к экземплярам объекта Stproc.

Таблица 12.20. Методы объекта BLOB.

Метод Описание Извлекает из базы данных и отображает экземпляр данных типа BLOB.

blobLink() Извлекает из базы данных и отображает HTML-ссылку, которая адресуется на экземпляр данных типа BLOB.

и функциональность приложений JavaScript. He забы Резюме вайте, что двух- и модели обладают как Перед тем как приступить к созданию Internet-прило- достоинствами, так и недостатками, и присущими им жений, следует разобраться в их архитектуре. Предва- степенью сложности и сопровождения.

рительный доступ к серверу окажет существенную по- Данная глава продемонстрировала, что в JavaScript мощь в выборе метода разработки приложений типа важна не только клиентская, но и серверная часть. С клиент/сервер. Функциональность JavaScript вместе с использованием Server-Side JavaScript этот механизмом баз данных позволяет перевести приложе- язык сценариев можно применить даже для создания ния на новый качественный уровень. целых Web-приложений.

Отдавая предпочтение клиентской или серверной обработке, следует принять во внимание быстродействие Использование DOM ЧАСТЬ В ЧАСТИ 13. Основы объектной модели документа (DOM) 14. Управление событиями 15. Объект Window 16. Объект Document 17. Объекты Form 18. Объекты Frame 19. Другие DOM-объекты Основы объектной модели документа (DOM) В ГЛАВЕ Понятие объектной модели документа Навигация по таблице Управление документами Навигация по документу В этой главе приводятся начальные понятия, каса- рованную структуру документа. Это дает возможность ющиеся объектной модели документа (Document Object формировать, редактировать и просматривать элементы Model — DOM) и ее назначения, характеристик, объек- и содержимое в HTML- или XML-документах. Струк тов и некоторых важных методов и свойств. Конечно, тура DOM — это всего лишь объектная иерархия, сопо здесь рассматриваются только основные принципы, ставимая с иерархией в JavaScript или любом другом например, навигация по документам, а также их визу- основанном на объектах языке. Различие в том, что ализация в виде деревьев DOM. В данной главе будут DOM-модель имеет полезный API, который является показаны важные методы DOM, которые работают не- нейтральным языком и стандартный набор посредственно с деревьями, хотя более детальные по- интерфейсов. Это не означает, что все прикладные про яснения будут даны в главе 19, где DOM-модель рассмат- граммы DOM будут основаны на одних и тех же объек ривается с точки зрения JavaScript. тах;

они должны собственные интерфейсы и объекты. Это возможно осуществить путем настройки приложения так, чтобы оно, например, стало DOM-со Понятие объектной модели документа вместимым.

Ключевые успехи Web помогают решить давно стоящие проблемы. Например, Java обеспечивает путь разработ По адресу ки от платформы прикладных Web-прило 19991210 находится Model жений с помощью аплетов, тогда как DOM-модель по (DOM) Level 2 Более ранняя специфи степенно решает другую довольно старую (хотя и не кация уровня Level 1 также находится на этом сайте.

столь важную) проблему создания JavaScript-сценариев Информация, содержащаяся в спецификации, не пе и программ на Java, переносимых в контексте Web-бра- редается непосредственно в JavaScript или другой язык создания сценариев. Прило узеров. Это достигается за счет использования стандар жение Е спецификации показывает привязку к соот тных прикладных программных интерфейсов (application ветствующему ECMAScript языку. В Web появилось programming interfaces — API), которые входят в язык большое количество учебников по DOM и множество определения интерфейсов (Interface Definition Language сопроводительных статей и документов.

- IDL), созданный Группой управления объектами (Object Management Group — OMG), и поэтому могут От DHTML к использоваться любым IDL-совместимым языком. Кол лективный DOM API можно считать методом стандар- Приведение Web-страниц к объектной модели имеет тизации объектов в браузерах при распространении много стадий, но самая существенная из них — DHTML, HTML- и XML-документов. Web-браузеры становятся который сом по себе является довольно незначащим по причем этот процесс идет быстры- с DOM. Это потому, что DOM — стандарти ми зированная объектная которую Web-разработчи О DOM-модели, фактически, можно сказать немно- ки ждали очень долго. Например, если Web-разработчик гое. Она просто определяет логическую и стандартизи- должен будет модифицировать или настраивать Web Использование DOM Часть III 13.1). Здесь показаны свойства childNodes, firstChild, страницу с помощью объектной модели DHTML, ему lastChild, nextSibling и previousSibling. Используем их, в качестве руководства потребуется значительный объем информации. Причина этому — огромное число HTML- чтобы понять структуру дерева и научиться перемещать дескрипторов, свойств, методов и событий. DHTML дей- ся к любой его части.

ствительно не больше, чем средства, позволяющие из- В DOM-дереве таблицы

будет находиться в корне дерева. Из этого следует, что можно двигаться в менять и управлять объектами с помощью атрибутов id любой пункт дерева, определяя соответствующий узел.

и name. Это далеко от стандартизации и упрощения DOM, которая инкапсулирует целый документ в объек- Двигаясь вниз по дереву, достигнуть различных его частей тную модель, представляя его в виде иерархии или де- можно с помощью выражений, показанных в табл.

Узлы дерева представляют собой HTML-деск рипторы и текстовые сегменты, которые они могут Управление документами содержать. Полный HTML-документ хранится в этом Рассмотрим некоторые основные методы DOM, кото дереве, а все объекты и их отношения отображаются как рые позволяют исполнять часто встречающиеся задачи.

дочерние и родительские элементы, а также элементы одного уровня. В отличие от DHTML, управлять и вно- В своем API DOM определяет методы, которые долж сить изменения в DOM-дерево документов весьма не- ны создавать, удалять, вставлять, менять сложно. Для изменений текстовых элементов, местами и заменять узлы или объекты. Эти методы и их просто изменяют значения узла дерева с помощью свой- аргументы, описания и возвращаемые значения, или ства Кроме того, существует возможность исходящие параметры, кратко описаны в табл. 13.2. Фак создавать, удалять и перемещать узлы в дереве DOM- тически, все это довольно очевидно;

метод документа. (Методы, которые позволяют это делать, удаляет поддерево, встроенное в указанный если deep равно true. Если же deep — false, удаляется только описываются позже, в табл. 13.2.) указанный узел, а его дочерние объекты возвращаются текущему родительскому элементу предыдущего уровня.

по таблице Другой метод, зависящий от логического параметра, Для того чтобы лучше понять структуру дерева, рассмот- cloneNode(). Когда параметр равен true, копируется под рим структуру DOM-дерева простой таблицы (см. рис. дерево, а когда он — false, копируется только узел.

Таблица Выражения для навигации.

Перемещение Выражение Ко второй строке таблицы.

К первой ячейке второй строки. tableNode.firstChild.childNodes[1].childNodes[0] К содержимому второй ячейки firstChild в первой строке.

К корню второй строки. Tr2Node.parentNode.parentNode или parentNode.parentNode или К каждой из ячеек и затем возврат в корень. parentNode.parentNode parentNode.parentNode.

parentNode.parentNode parentNode.parentNode.

parentNode.parentNode parentNode.parentNode.

parentNode К каждой из ячеек. firstChild tableNode.

объектной модели документа Глава РИСУНОК 13.1. Простая структура DOM-дерева таблицы.

II I I I [ I | I Таблица 13.2. Методы DOM для управления документами.

Синтаксис метода Аргумент или Описание параметр fatherObj.appendChild(childObj) Объект Добавляет дочерний объект к родительскому объекту (fatherObj).

ApplyElement Объект Направляет элемент объекта к другому объекту (fatherObj).

ClearAttributes He имеет Удаляет все атрибуты и значения объекта (clearedObj).

CloneNode newObj cloneNode(deep) Логический Копирует существующий объект для создания нового (newObj).

newObj = document. Создает узел (newObj) для нового дескриптора.

дескриптор CreateTextNode newObj = document. Строка Создает новый текстовый узел (newObj).

createTextNode(string) HasChildNodes = testedObj. He имеет Определяет, имеет ли объект дочерние элементы.

hasChildNodes() brotherbbj) Объект Вставляет объект (childObj) как дочерний элемент для (parentObj).

Объект Объединяет все атрибуты в (targetObj).

He имеет Удаляет поддерево объекта, если deep равно true, и только узел, если deep — false.

ReplaceNode oldObj.replaceNode(newObj) Объект Заменяет узел (oldObj) новым (newObj).

SwapNode Объект Меняет местами один узел с другим.

иерархиями, показывая все их связующие ссылки. Но Объектная модель и атрибуты соглашение не требует представления документов Структура DOM-документа может, фактически, в виде деревьев, а также не требует наличия определен чать множество деревьев, являющихся объектными отношений между объектами. Однако, каждый до Использование DOM Часть III кумент должен иметь узел типа документа, корневой Навигация по документу узел элемента, служащий корнем дерева документа, а также комментарии или инструкции по обработке. Пред- Рассмотрев, как управлять простой таблицей, вполне в виде дерева, или структурная модель, имеет естественно перейти к тому, как делать то же самое с до информационные элементы, к которым обращаются, кументом. Листинг 13.1 показывает DOM-структуру, ко используя методы перемещения по дереву. DOM также торая содержит заголовок документа, текстовый блок и твердо придерживается структурного изоморфизма, в ко- четыре параграфа:

тором различные DOM-совместимые реализации при Листинг Простой документ.

создании представления одного и того же документа приводят к идентичной структурной модели. Узлы, об суждавшиеся выше, имеют различные атрибуты, многие DOM document tree из которых перечислены в табл.

ПРИМЕЧАНИЕ The main document Изменение префикса атрибута, который принимает

Таблица 13.3. Часто используемые атрибуты Атрибут Чтение/запись Атрибуты типа Только для чтения NamedNodeMap содержит атрибуты узла.

childNodes типа Только для чтения NodeList содержит все дочерние элементы узла.

firstChild типа Node Только для чтения Первый дочерний элемент узла;

если узел не существует, возвращается Null.

lastChild типа Node Только для чтения Последний дочерний элемент узла;

если узел не существует, то возвращается Null.

localName типа DOMString Только для чтения Возвращает локальную часть составного имени данного узла.

Когда используется с узлами, созданными с помощью метода первого уровня, включая createElement, то возвращает значение Null.

namespaceURI типа DOMString Только для чтения Содержит данное значение namespaceURI. Это — всегда Null для узлов всех типов, кроме ElementNode или AttributeNode.

Это Null для узлов, созданных методом первого уроаня, включая createElement из интерфейса Document.

nextSibling типа Node Только для чтения Следующий узел в последовательности;

когда следующего узла не существует, возвращается Null.

nodeName типа DOMString Только для чтения Имя узла.

nodeType типа unsigned short Только для чтения Код, содержащий определенный тип объекта.

типа Document Только для чтения Объект Document, который принадлежит узлу;

этот объект Document используется для создания новых узлов.

parentNode типа Node Только для чтения Родительский элемент узла. Это — не Attr, Document, DocumentFragment, Entity или Notation.

ParentNode будет равен Null, если узел недавно создан и только должен стать частью дерева, либо если он удален из дерева.

Префикс типа DOMString Префикс пространства имен узла;

возвращается пустой указатель, если ничего не определено. Установка этого атрибута заменяет атрибут nodeName, который содержит составное имя tagName и атрибуты имен интерфейсов Attr и Element.

типа Node Только для чтения Следующий из предыдущих узлов;

когда такой узел не существует, возвращается Null.

Основы объектной модели документа Глава Дескриптор находится на верхнем уровне блоков. Можно управлять деревом из узлов, которые дерева и имеет пять дочерних элементов: четыре деск- имеют атрибуты ID. Используя свойства DOM, можно риптора <Р> и одиночный текстовый блок. DOM-дере- перемещаться к любому пункту в документе (см. табл.

во документа имеет узлы для дескрипторов и текстовых 13.4).

Таблица 13.4. Навигация по документу.

Перемещение Выражение К первому дочернему элементу. или bodyNode.childNodes[0] Ко второму дочернему элементу.

К четвертому или последнему дочернему элементу. или bodyNode.lastChild Ко второму дочернему элементу корня (текстового узла) от узла К третьему дочернему элементу корня от узла К последнему дочернему элементу корня. nextSibling К дочерним элементам четвертого дочернего элемента.

Ко второму дескриптору <Р> от третьего <Р>.

К дочернему элементу дескриптора К дескриптору корня от дескриптора <Р>.

К дочернему элементу и возврат к . parentNode.parentNode вались свойства, их изменения и использование для Резюме получения информации с помощью модели дерева. При В главе рассматривались основные принципы DOM, a водилась терминология DOM, например, узлы с имена также базовая объектная модель, применимая к стандар- ми типа firstChild, nextSibling и previousSibling.

тным объектам простых Web-страниц. Были показаны С этой основной информацией теперь можно подроб методы навигации и способы перемещения между узла- но остановиться на приложении DOM в контексте ми, определяющими документы. Кроме того, рассматри- JavaScript. В главе 19 DOM исследуется более подроб событиями В ГЛАВЕ Понятие событий и обработчиков событий Обработчики событий JavaScript Обработка ошибок Прерывание загрузки изображения Замена обработчиков событий Программная генерация событий События таймера Если в последние несколько лет вы много занима Обработчики событий JavaScript лись программированием, скорее всего, вы использова ли язык программирования, управляемый событиями. Разработчикам HTML-страниц известно, что каждый Процедурные программы из прошлого диктовали, какие элемент в форме имеет дескриптор и связанный с ним задачи пользователю в любой заданный мо- атрибут. Например, ввод текста определяется следующим мент времени. Однако, графические оконные среды способом:

сегодня имеют совершенно другую парадигму и требу size= ют, чтобы прикладные программы, в первую очередь, отвечали на инициированные пользователями события.

JavaScript реализует обработчики событий, всграивая Памятуя об основанном на объектах характере их в качестве атрибутов HTML-дескрипторов. Напри JavaScript (см. главу 9) можно ожидать, что JavaScript мер, предположим, что необходимо выполнять создан является прежде всего управляемым событиями языком.

ный метод каждый раз, когда значение объекта Text Эта глава рассматривает JavaScript-события и способы изменяется. Для этого придется присвоить метод (с име ответа на них, т.е. создание на сайте интерактивных сце нем, например, обработчику событий нариев.

объекта Text:

разработчику сосредотачиваться только на событиях, size= которые затрагивают его приложение;

то, что браузер исполняет между событиями — дело браузера, а не раз- "if ( you wish to change this работчика. Кроме того, разработчику не нужно интере { соваться всеми событиями, выполненными пользовате лем — лишь только теми, которые требуют ответа.

СОВЕТ Каждое JavaScript событие имеет соответствующий При использовании встроенного кода можно разме обработчик событий (event handler), который предназна щать сразу несколько строк в пределах назначения об чен для автоматического ответа на происходящее собы- работчика событий, применяя точку с запятой для от деления друг от друга операторов JavaScript. Однако, тие. При работе с событием к нему не добавляют код и множество строк программы следует применять с ос не изменяют его непосредственно, а, скорее, управляют торожностью. Намного проще работать с кодом, вы обработчиком события, которому данное событие соот деленным в функцию, а не с находящимся непосред ветствует.

Управление событиями Глава внутри обработчика событий. Например, если В разделе HTML-файла записывается метод весь код физически расположить в одном месте, из который будет вызываться при вызове об менения делать в нем окажется намного удобнее.

работчика событий кнопки onClick:

Далее в главе исследуются самые распространенные события, поддерживаемые как Microsoft Internet Explorer, Щелчок на объекте Одна из наиболее общих целей JavaScript — расширение Когда пользователь нажимает кнопку, обработчик HTML-формы и достижение таким способом большей событий использует метод ореп() объекта Window для степени взаимодействия с пользователем. Если это так, вывода на дисплей содержащего возможно, единственное наиболее частое событие, с шляпы (см. рис.

которым будет работать большинство разработчиков, — Обработчик событий OnClick существует не только это событие click. Событие click вызывается, когда для кнопок;

его можно использовать для ответа на вклю пользователь щелкает на каком-либо объекте, предназ чение флажков, выбор переключателей и щелчка на наченном для нажатия.

объектах Link. Из-за характера этих элементов управле Для большинства компьютерных сред событие click ния настройка их события click встречается редко. Флаж вызывается только после того, как заданная по умолча ки и переключатели часто используются для ввода дан нию кнопка мыши нажата и отпущена. Пользователь, ных и вычисляются после выполнения на них щелчка.

который будет держать кнопку мыши и не отпустит ее Что касается объекта Link, то он используется прежде на объекте, событие click объекта не вызовет.

всею как ссылка на расположение, указанное в его свой Когда событие click происходит, обработчик событий стве href, и в добавлении кода часто нет необходимос onClick для нажатого объекта выполняет одну (или боль ти, если только не нужно менять его заданное по умол ше) JavaScript-команд либо вызывает определенную чанию поведение.

функцию. Например, посмотрим на кнопку "View Hat" на рис. что необходимо добавить код, который при нажатии этой кнопки отобразит еще View одно окно браузера с изображением шляпы.

В HTML объект Button определяется следующим образом:

rta Hat Order Form

Использование DOM Часть III его обработчик событий onCIick добавляется следую- Метод используемый в обработчике щий код:

событий onSubmit формы, объявляется в разделе

onSubmit rooms are very { Are you Room return you certain you wish to the Kakata Поскольку вид Web-страницы также важен, для от I вета на события click вместо кнопок лучше использовать При включении метода он отобража изображения. Хотя изображение не способно фактичес ет диалоговое окно Confirm с кнопками "ОК" и "Cancel".

ки ответить на любое событие, можно имитировать со Если пользователь нажимает на "ОК", диалоговое окно бытие click с помощью объекта Link. Продемонстриру закрывается и в обработчик событий onSubmit возвра ем это, используя изображение вместо кнопки "View Hat" щается значение true. Если пользователь нажимает на для вызова метода из предыдущего приме "Cancel", возвращается false. Оператор return в обработ ра. Для этого определим соответствующий объект Link:

чике событий onSubmit исследует входящее значение и

sro = align=bottom Оператор return в назначении обработчика событий не height=75> обходим для корректной работы кода. Присваивание обработчику событий onSubmit = запус Вместо добавления кода в обработчик события обработку формы независимо от возвращенного из onCIick ссылки, здесь используется JavaScript в качестве диалогового окна значения.

протокола для свойства href. Использование JavaScript:

Обработчик событий onSubmit — то же самое, что как значение свойства href застав и обработчик событий onCIick объекта Submit. Оба они ляет браузер выполнить выражение JavaScript вместо — события, которые можно использовать, чтобы захва перехода к определенной ссылке.

тить форму прежде, чем она будет обработана. Как по формы (onSubmit) казано на рис. 14.3, обработчик событий onCIick объекта Submit был вызван до вызова обработчика onSubmit Как обсуждалось в главе одно из преимуществ исполь формы.

зования JavaScript в HTML-формах — возможность вы полнения проверки правильности данных на стороне клиента вместо перекладывания этой задачи на и без Form того перегруженный сервер. Проверку правильности можно выполнять для каждого поля в отдельности или OnCIick для всех полей сразу. В зависимости от контекста ис пользуется один или оба метода.

Yes Для проверки правильности данных во всех полях сразу, равно как и для других задач, главное значение OnSubmit имеет событие submit. Это событие генерируется как раз перед отправкой HTML-формы. Добавление кода в об Yes работчик событий onSubmit объекта Form дает возмож Ч ность совершить проверку, а затем разрешить продолже или блокировать его, уведомив об этом пользователя.

Событие submit произойдет, если от обработчика РИСУНОК 14.3. событий событий onSubmit не возвращается значение false. Лю для отправки формы.

бое другое значение (true или еще что-нибудь) приве дет к генерации этого события. Например, жим, что перед отправкой формы на сервер необходимо Обработчик событий onSubmit — идеальное место отобразить простое сообщение для пользователя с для размещения проверки правильности данных формы просьбой подтвердить заполнение формы заказа шляпы до ее отправки на сервер.

Форма в HTML определяется следующим обра Сброс формы (onReset) зом:

Может понадобится вызвать событие и при сбросе фор мы, а не только при отправке. Обработчик событий onReset вызывает код JavaScript, когда происходит Управление событиями Глава тие reset. Так же, как onSubmit, onReset — обработчик Получение фокуса событий объекта Form.

Для демонстрации этого снова рассмотрим форму Событие focus вызывается, когда объект поля получает заказа шляпы Kakata, упомянутую в прошлом разделе. фокус, т.е. когда пользователь переходит к объекту с После добавления нового обработчика событий к опре- использованием клавиши "Tab" или с помощью щелчка делению объекта Form код будет выглядеть так: мыши на объекте, либо когда вызывается метод объекта. В каждый момент времени фокус может иметь только один объект.

Мегод используемый в обработчике JavaScript 1.1 и последующие версии расширяют воз событий onReset формы, объявляется в разделе можности onFocus, включая его в качестве обработ файла:

чика событий для объектов Window, Frame и Frameset.

Для каждого из этих объектов обработчик событий событий onFocus определяет действие, которое должно выпол function { ниться при переходе фокуса.

return confirm you certain you wish to Обработчик событий OnFocus должен размещаться the order внутри дескрипторов объектов Window, Frame или Frameset.

ПРИМЕЧАНИЕ Обработчик событий onReset в Обработчик событий onFocus в этих объекта может и более поздних версиях.

отвечать за переключение действия. Например, он мо жет расширять стандартное поведение объектов Text в форме. При переходе к объекту Text курсор появляется Изменение данных (onChange) по умолчанию. Однако, во многих средах (например, в Как упоминалось в связи с событием submit, если при- Windows), если поле уже имеет значение, то при уста кладные программы JavaScript имеют дело с данными, новке фокуса на объект содержимое поля выделяется.

Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 10 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.