Объекты
1. Введение
При описании какой-то сущности: пользователя, гостя, продукта, необходима структура, позволяющая хранить все характеристики связно и в одном месте. В большинстве языков программирование для этого используется тип данных Object (объект).
С точки зрения языка программирования, объект - это набор свойств и методов. С точки зрения разработчика, объект - это абстракция, описывающая какие-то данные и функции для обработки этих данных.
Какие именно свойства (данные) и методы (функции обработки данных) должны быть в объекте решается каждый раз с учетом конкретной задачи.
2. Создание объекта
Объект — ассоциативный массив, тип данных, хранящий свойства (properties) и методы (methods).
Создание объекта через литерал похоже на создание массива, только используются фигурные {}
, а не квадратные скобки.
При создании объект может быть инициализирован свойствами, каждое из которых описывается парами ключ:значение (key:value)
. Свойства разделяются запятой.
Ключ — это всегда строка. Значением могут быть любые типы: примитивы, массивы, объекты, були, функции и т. п.
Правила именования ключей просты:
Если ключ заключен в кавычки, то это может быть произвольная строка.
Если кавычек нет, то вступают ограничения — имя без пробелов, начинается на букву или символы
_
и$
.
Например, в программе для туроператора понадобится объект, описывающий отель: название, уровень сервиса, вместимость и т. п.
3. Доступ к свойствам
Доступ к свойству объекта, для того чтобы получить или присвоить ему значение, может быть записан двумя способами:
object.key
— через точку.object["key"]
— через квадратные скобки с именем ключа в кавычках.
На место обращения будет возвращено значение свойства с таким ключом.
Если при записи значения по ключу, такого ключа в объекте нет, он будет создан.
4. Удаление свойств
Удалить свойство объекта можно с помощью оператора delete
. Удаление свойств - операция крайне редкая, чаще всего свойства только добавляются или изменяются.
5. Отсутствующие свойства
Отсутствующее свойство, при обращении к нему по ключу, возвращает undefined
.
6. Короткие свойства
Часто есть переменные, например, name
и stars
, и мы хотим использовать их в объекте так, чтобы имя переменной стало ключом, а значение переменной - значением свойства. При объявлении объекта в этом случае достаточно указать только имя свойства, а значение будет взято из переменной с аналогичным именем. Это - синтаксис коротких свойств (shorthand properties).
7. Вычисляемые свойства
Иногда необходимо добавить к объекту поле с ключом, значение которого мы заранее не знаем, он хранится как значение переменной. Раньше для этого необходимо было сначала создать объект, а потом добавлять свойства через квадратные скобки.
Используя вычисляемые свойства, можно избежать лишнего кода и в некоторых случаях значительно его упросить. Значением вычисляемого свойства может быть любое валидное выражение.
8. Методы объекта
Объекты хранят не только данные, но и функции для работы с этими данными. Если значение свойства - это функция, то оно называется методом объекта.
Так как методы - это обычные свойства, значение которых - это функция, их можно добавлять или удалять в любой момент.
8.1. Доступ к объекту через this
Методы используются для изменения свойств объекта. Для доступа к текущему объекту в методе используется не имя объекта, а ключевое слово this
- контекст. Значением this
является объект перед 'точкой'
, в контексте которого вызван метод.
Значение this
определяется в момент вызова функции, а не в момент ее объявления. То есть во время вызова hotel.showName()
, в this
внутри функции showName
будет записана ссылка на объект hotel
.
Будет логично задуматься - почему бы не использовать при обращении к свойствам имя объекта. Дело в том, что имя объекта - штука не надежная, методы одного объекта можно копировать в другой (с другим именем), а в будущем мы узнаем, что часто при создании объекта мы заранее не знаем имени. Использование this
гарантирует, что функция работает именно с тем объектом, в контексте которого вызвана.
Last updated