Встроенные объекты языка JavaScript
Ранее мы познакомились со встроенным объектом Date, который предоставляется самим языком JavaScript и служит для хранения значений даты и времени:
var dNow = new Date();
Объект Date поддерживает ряд методов, позволяющих получать отдельные составляющие даты и времени и манипулировать ими. Так, метод getDate возвращает число, getMonth — номер месяца, а getFullYear — год. Все эти методы не принимают параметров, а возвращаемые ими результаты представляют собой числа.
Пример:
var sNow = dNow.getDate() +"." + dNow.getMonth() +"." +
dNow.getFullYear();
Здесь мы объединяем в одну строку число, номер месяца и год, разделяя их точками. Таким образом мы получим значение даты в формате <число>.<месяц>.<год>.
При этом JavaScript сам выполняет неявное преобразование числовых величин в строки.
Объект String служит для хранения строк.
var s = "JavaScript";
Мы только что создали экземпляр объекта String, хранящий строку JavaScript.
Здесь мы столкнулись с одной особенностью JavaScript, отличающей его от других языков программирования. Все значения простых типов данных в нем на самом деле являются экземплярами соответствующих объектов. Так, строка — это фактически экземпляр объекта String.
Свойство length объекта String хранит длину строки в символах:
var l = s.length;
var l = "JavaScript".length;
Эти выражения помещают в переменную l длину строки JavaScript.
Метод substr возвращает фрагмент строки заданной длины, начинающийся с указанного символа:
substr(<номер первого символа>[, <длина фрагмента>]);
Первым параметром передается номер первого символа, включаемого в возвращаемый фрагмент строки.
ВНИМАНИЕ!
В JavaScript символы в строках нумеруются, начиная с нуля.
Второй, необязательный, параметр задает длину возвращаемого фрагмента в символах. Если он опущен, возвращаемый фрагмент будет содержать все оставшиеся символы строки.
После выполнения Web-сценария
var s1 = s.substr(4);
var s2 = s.substr(4, 2);
в переменной s1 окажется строка "Script", а в переменной s2 — строка "Sc".
Объект Number служит для хранения чисел, а объект Boolean — логических величин:
var n = 123;
var b = false;
Числа и логические величины с точки зрения JavaScript также представляют собой экземпляры соответствующих объектов.
Объект Array служит для хранения массивов:
var a = [1, 2, 3, 4];
Он поддерживает единственное свойство length, возвращающее размер массива, т. е. число элементов в нем:
var l = a.length;
var l = [1, 2, 3, 4].length;
Уже знакомый нам объект Math, единственный экземпляр которого создается самим JavaScript и хранится в переменной Math, представляет набор методов для выполнения математических и тригонометрических вычислений.
Мы не будем рассматривать здесь все встроенные объекты JavaScript и поддерживаемые ими свойства и методы. Это можно найти в любой книге по JavaScript- программированию.
Объект Object и использование его экземпляров
Но об одном встроенном объекте следует поговорить особо. Это объект Object, весьма специфический.
Экземпляры этого объекта обычно используются для хранения сложных структур данных, включающих произвольный набор свойств и методов. Один экземпляр объекта Object может иметь один набор свойств и методов, а другой экземпляр — совсем другой.
Экземпляры объекта Object создают с помощью особых выражений, называемых инициализаторами. Инициализатор чем-то похож на определение стиля (листинг 14.12).
Листинг 14.12
{
<имя свойства 1>: <значение свойства 1>,
<имя свойства 2>: <значение свойства 2>,
.
<имя свойства n-1>: <значение свойства n-1>;
<имя свойства n>: <значение свойства n>
<имя метода 1>: <функция, реализующая метод 1>,
<имя метода 2>: <функция, реализующая метод 2>,
.
<имя метода n-1>: <функция, реализующая метод n-1>,
<имя метода n>: <функция, реализующая метод n>
}
После выполнения инициализатора JavaScript вернет нам готовый экземпляр объекта Object, который мы можем присвоить какой-либо переменной или использовать в качестве параметра функции или метода.
Пример:
var oConfig = { tag: "DIV", id: "cother", html: "Это прочие сведения." };
Здесь мы получили экземпляр объекта Object со свойствами tag, id и html, задали для этих свойств значения и сохранили получившийся экземпляр в переменной oConfig.
Пример:
var oConfig2 = { url: "pages/t_img.htm",
success: function (response, opts){
var obj = Ext.decode(response.responseText);
}
};
А здесь мы создали экземпляр объекта Object со свойством url и методом success и сохранили получившийся экземпляр в переменной oConfig2. (Код последнего примера взят из документации по библиотеке Ext Core.)
Обратим внимание на два момента. Во-первых, функцию, реализующую метод success, мы объявили прямо в инициализаторе. Во-вторых, создание метода в данном случае — суть присваивание функции, которая реализует этот метод, свойству, имя которого станет именем метода. Следовательно, здесь тот же самый случай, что и с присваиванием функции переменной (см. раздел, посвященный функциям).
Экземпляры объекта Object в библиотеке Ext Core обычно служат для задания различных необязательных параметров и создаются как раз с помощью инициализаторов. Так что мы часто будем иметь с ними дело.
Объекты Web-обозревателя. Объектная модель документа DOM
Объекты, предоставляемые Web-обозревателем, делятся на две группы:
— объекты, представляющие Web-страницу и элементы, созданные с помощью разных тегов (абзац, заголовок, таблица, изображение и др.);
— объекты, представляющие сам Web-обозреватель. Начнем с объектов первой группы.
Как мы уже знаем, саму Web-страницу представляет объект HTMLDocument. Единственный экземпляр данного объекта хранится в переменной document и представляет Web-страницу, открытую в текущем окне Web-обозревателя.
Отдельный элемент Web-страницы, независимо от тега, с помощью которого он создан, представляется объектом HTMLElement. На этом объекте основаны другие объекты, представляющие элементы Web-страницы, которые созданы на основе определенных тегов. Так, абзац представляется объектом HTMLParagraphElement, изображение — объектом HTMLImageElement, гиперссылка — объектом HTMLLinkElement, а таблица — объектом HTMLTableElement.
Для каждого элемента загруженной Web-страницы Web-обозреватель создает экземпляр соответствующего объекта. Например, для каждого абзаца создается экземпляр объекта HTMLParagraphElement, для каждого изображения — экземпляр объекта HTMLImageElement, для каждой гиперссылки — экземпляр объекта HTMLLinkElement, а для каждой таблицы — экземпляр объекта HTMLTableElement.
В результате в памяти компьютера создается структура взаимосвязанных экземпляров объектов, соответствующая структуре элементов Web-страницы. Она называется объектной моделью документа, или DOM (сокращение от Document Object Model — объектная модель документа).
Объект HTMLDocument поддерживает ряд методов для доступа к нужному элементу Web-страницы, в смысле — к представляющему его экземпляру соответствующего объекта. Обычно для уникальной идентификации элемента Web-страницы используется значение атрибута тега ID. Мы поговорим об этом подробнее в главе 15.
Объект HTMLElement поддерживает свойства и методы, общие для всех типов элементов Web-страницы. Они позволяют получить или задать значение какого-либо атрибута тега, привязать к нему стилевой класс, вставить в элемент Web-страницы другой элемент в качестве дочернего и пр. Объекты, созданные на основе HTMLElement, расширяют этот набор свойств и методов.
DOM является одним из основополагающих стандартов Интернета, разрабатывается и утверждается организацией W3C. Все Web-обозреватели обязаны ее поддерживать.
Что касается объектов второй группы, то их немного. Это, прежде всего, объект Window, представляющий окно Web-обозревателя и поддерживающий ряд свойств и методов, с помощью которых мы можем им управлять. Экземпляр этого объекта, представляющий текущее окно Web-обозревателя, хранится в переменной window. Кроме того, существует еще несколько объектов, представляющих Web-обозреватель, но они встречаются значительно реже.
К рассмотрению объектов Web-обозревателя мы вернемся в главе 15. А пока что закончим с ними.
Свойства и методы экземпляра объекта
Как мы уже знаем, объект определяет набор свойств и методов, которые затем станут "собственностью" всех его экземпляров. Иными словами, экземпляр объекта получит все свойства и методы, что объявлены в объекте, на основе которого он создан. Это так называемые свойства и методы объекта.