Чтение онлайн

на главную - закладки

Жанры

HTML: Популярный самоучитель
Шрифт:

Массивы в JavaScript являются объектами (оператор typeof для переменных-массивов возвращает значение object). К тому же отсутствуют ограничения относительно формы, например, двумерных массивов: можно создавать как прямоугольные, так и треугольные или другие массивы произвольной формы. В ряде случаев это весьма полезно, но иногда может и запутать.

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

12.8. Работа с объектами

Главная цель этого раздела – познакомить вас с приемами программирования на JavaScript, которые будут необходимы для организации взаимодействия с браузером и без которых сценарий в HTML-документе совершенно бесполезен.

Понятие объекта. Свойства и методы

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

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

Единственным существенным отличием использования свойств и методов объектов является необходимость указывать, к какому именно объекту относится свойство или метод. Это делается в программе с помощью оператора . (точка).

Объекты перед использованием необходимо создавать. Создание объектов осуществляется при помощи оператора new. Например, пусть есть класс point, содержащий свойства x и y, хранящие координату точки на плоскости, и метод distance(x, y), который позволяет рассчитать расстояние от точки с нужными координатами до точки, описываемой объектом. Тогда создание и использование объекта класса point можно проиллюстрировать следующим примером:

var p = new point; //Создание объекта класса point

p.x = p.y = 10; //Присвоение значений свойствам

var dist = distance(20, 0); //Вызов метода distance

В приведенном примере создавался пустой объект в том смысле, что изначально неизвестно, какое значение имеют свойства x и y только что созданного объекта. Если класс point поддерживает инициализацию при создании объектов, то присвоить начальные значения атрибутам можно следующим образом:

var p = new point(10, 10);

Примечание

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

Осталось сказать несколько слов об удалении объектов. Итак, JavaScript позаимствовал у Java такую особенность, как ненужность удаления объектов. Неиспользуемые объекты удаляются автоматически.

Встроенные классы JavaScript

После того как изложены основные принципы работы с объектами, можно кратко рассмотреть классы Array, Date, Number и String, которые могут очень пригодиться не только на начальном этапе освоения JavaScript. Кроме этих двух классов, нужно рассмотреть также объект Math, который может оказаться весьма полезным при создании различных визуальных эффектов.

Класс Array

Класс Array является достаточно удобным расширением обычных массивов. Главным образом за счет наличия дополнительных методов, позволяющих производить довольно сложные манипуляции с данными массива. Класс Array имеет следующие конструкторы:

Array

Array(размер)

Array(элемент1, элемент2, ...)

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

var arr1 = new Array; //Пустой массив

var arr2 = new Array(5); //Массив из пяти неопределенных элементов

var arr3 = new Array(1,2,3,4,5); //Массив [1,2,3,4,5]

Размер массива можно узнать с помощью свойства length объекта Array. Доступ к элементам массива осуществляется с помощью [] по индексам элементов. Нумерация элементов, как и в случае обычного массива, начинается с нуля.

Как было сказано ранее, объект Array отличает ряд методов, ориентированных на работу с данными в массиве. Описания этих методов приводятся в табл. 12.6.

Таблица 12.6. Методы класса Array

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

Теперь несколько слов о том, для чего методу sort нужна функция сравнения. Так вот, для возрастающей или убывающей сортировки строковых значений в массиве использование метода sort без написания своей функции сравнения не представляет трудностей (для убывающей сортировки достаточно после метода sort вызвать метод reverse). А вот приведенная ниже сортировка чисел даст не очень хороший результат:

var arr = new Array(5,2,25,16);

arr.sort;

В результате получится массив [16,2,25,5], а не [2,5,15,25]. Ошибки здесь нет, были отсортированы посимвольно строки из переданных чисел. Но в данном примере нужно сортировать числа. Для этого и пишется своя функция сравнения:

function comp(val1, val2){

if (val1>val2) return 1;

else

if (val1<val2) return –1;

else return 0;

}

Теперь вызов метода в виде sort(comp) приведет к правильной сортировке чисел по возрастанию. Задание своей функции сравнения дает большие возможности при обработке массива. Похожим образом можно очень просто сделать сортировку, например, двумерного массива по количеству элементов во вложенных массивах, по среднему значению, по сумме значений и т. д.

Поделиться:
Популярные книги

Воронцов. Перезагрузка

Тарасов Ник
1. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.00
рейтинг книги
Воронцов. Перезагрузка

Защитник

Кораблев Родион
11. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Защитник

Камень. Книга шестая

Минин Станислав
6. Камень
Фантастика:
боевая фантастика
7.64
рейтинг книги
Камень. Книга шестая

Эволюционер из трущоб. Том 3

Панарин Антон
3. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
6.00
рейтинг книги
Эволюционер из трущоб. Том 3

Изгой Проклятого Клана

Пламенев Владимир
1. Изгой
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Изгой Проклятого Клана

Последний Паладин. Том 6

Саваровский Роман
6. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 6

Запрети любить

Джейн Анна
1. Навсегда в моем сердце
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Запрети любить

Неудержимый. Книга XXI

Боярский Андрей
21. Неудержимый
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неудержимый. Книга XXI

Кодекс Охотника. Книга XXXIII

Винокуров Юрий
33. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Кодекс Охотника. Книга XXXIII

Кодекс Охотника. Книга XXXVIII

Винокуров Юрий
38. Кодекс Охотника
Фантастика:
фэнтези
боевая фантастика
попаданцы
юмористическое фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XXXVIII

На границе империй. Том 10. Часть 9

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 9

Антимаг

Гедеон Александр и Евгения
1. Антимаг
Фантастика:
фэнтези
6.95
рейтинг книги
Антимаг

Беглый

АЗК
1. Беглый
Фантастика:
детективная фантастика
альтернативная история
5.00
рейтинг книги
Беглый

Геном хищника. Книга третья

Гарцевич Евгений Александрович
3. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга третья