Объекты

1. Введение

При описании какой-то сущности: пользователя, гостя, продукта, необходима структура, позволяющая хранить все характеристики связно и в одном месте. В большинстве языков программирование для этого используется тип данных Object (объект).

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

Какие именно свойства (данные) и методы (функции обработки данных) должны быть в объекте решается каждый раз с учетом конкретной задачи.

2. Создание объекта

Объект — ассоциативный массив, тип данных, хранящий свойства (properties) и методы (methods).

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

const hotel = {};
Copy

При создании объект может быть инициализирован свойствами, каждое из которых описывается парами ключ:значение (key:value). Свойства разделяются запятой.

Ключ — это всегда строка. Значением могут быть любые типы: примитивы, массивы, объекты, були, функции и т. п.

Правила именования ключей просты:

  • Если ключ заключен в кавычки, то это может быть произвольная строка.

  • Если кавычек нет, то вступают ограничения — имя без пробелов, начинается на букву или символы _ и $.

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

const hotel = {
  name: 'Resort Hotel',
  stars: 5,
  capacity: 100,
};
Copy

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

Будет логично задуматься - почему бы не использовать при обращении к свойствам имя объекта. Дело в том, что имя объекта - штука не надежная, методы одного объекта можно копировать в другой (с другим именем), а в будущем мы узнаем, что часто при создании объекта мы заранее не знаем имени. Использование this гарантирует, что функция работает именно с тем объектом, в контексте которого вызвана.

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

Last updated