Skip to content

Практическая работа №4

Объекты, работа с объектами, методы для работы с объектами

Section titled “Объекты, работа с объектами, методы для работы с объектами”

Цель работы:

  • Закрепить теоретические знания об объектах в JavaScript.
  • Научиться создавать и инициализировать объекты.
  • Освоить работу со свойствами и методами объектов.
  • Применять встроенные методы для работы с объектами.

Основные теоретические положения

Section titled “Основные теоретические положения”

1. Что такое объект в JavaScript?

Section titled “1. Что такое объект в JavaScript?”

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

// Пример простого объекта
let user = {
name: "Иван",
age: 30,
isAdmin: true
};

Существует несколько способов создания объектов в JavaScript:

2.1. Литерал объекта (Object Literal)
Section titled “2.1. Литерал объекта (Object Literal)”

Это самый простой и распространенный способ создания объекта. Вы определяете объект, заключая пары “ключ-значение” в фигурные скобки {}.

let person = {
firstName: "Анна",
lastName: "Смирнова",
age: 25
};

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

let car = new Object();
car.brand = "Toyota";
car.model = "Camry";
car.year = 2020;

3. Доступ к свойствам объектов

Section titled “3. Доступ к свойствам объектов”

Доступ к свойствам объекта осуществляется двумя способами:

3.1. Точечная нотация (Dot Notation)
Section titled “3.1. Точечная нотация (Dot Notation)”

Самый распространенный способ, когда имя свойства известно заранее.

console.log(user.name); // "Иван"
3.2. Квадратные скобки (Bracket Notation)
Section titled “3.2. Квадратные скобки (Bracket Notation)”

Используется, когда имя свойства хранится в переменной или содержит специальные символы (пробелы, дефисы).

let key = "age";
console.log(user[key]); // 30
console.log(user["is Admin"]); // Если бы свойство называлось "is Admin"

4. Изменение и добавление свойств

Section titled “4. Изменение и добавление свойств”

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

user.age = 31; // Изменение
user.city = "Москва"; // Добавление

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

delete user.isAdmin;

6. Итерация по свойствам объекта

Section titled “6. Итерация по свойствам объекта”

Для перебора свойств объекта можно использовать цикл for...in или методы Object.keys(), Object.values(), Object.entries().

for (let key in user) {
console.log(`${key}: ${user[key]}`);
}
console.log(Object.keys(user)); // ["name", "age", "city"]
console.log(Object.values(user)); // ["Иван", 31, "Москва"]
console.log(Object.entries(user)); // [["name", "Иван"], ["age", 31], ["city", "Москва"]]

7. Встроенные методы для работы с объектами

Section titled “7. Встроенные методы для работы с объектами”

JavaScript предоставляет ряд полезных встроенных методов для работы с объектами:

  • Object.assign(target, ...sources): Копирует все перечисляемые собственные свойства из одного или нескольких исходных объектов в целевой объект. Возвращает целевой объект.

    let obj1 = { a: 1 };
    let obj2 = { b: 2 };
    let obj3 = { c: 3 };
    Object.assign(obj1, obj2, obj3);
    console.log(obj1); // { a: 1, b: 2, c: 3 }
  • Object.freeze(obj): Замораживает объект. Это означает, что нельзя добавлять новые свойства, удалять существующие, изменять перечисляемость, конфигурируемость или записываемость существующих свойств, а также изменять значения существующих свойств. Возвращает замороженный объект.

    let config = { API_KEY: "123", URL: "example.com" };
    Object.freeze(config);
    config.API_KEY = "new_key"; // Не сработает в строгом режиме, в нестрогом - проигнорируется
    console.log(config.API_KEY); // "123"
  • Object.seal(obj): Запечатывает объект. Это предотвращает добавление новых свойств и удаление существующих. Однако значения существующих свойств могут быть изменены. Возвращает запечатанный объект.

    let settings = { theme: "dark" };
    Object.seal(settings);
    settings.theme = "light"; // Сработает
    settings.version = "1.0"; // Не сработает
    console.log(settings); // { theme: "light" }
  • Object.keys(obj): Возвращает массив из собственных перечисляемых строковых свойств объекта.

  • Object.values(obj): Возвращает массив из собственных перечисляемых значений свойств объекта.

  • Object.entries(obj): Возвращает массив из собственных перечисляемых пар [ключ, значение] свойств объекта.


Для каждого задания необходимо:

  1. Написать программу на языке программирования JavaScript;
  2. Произвести отладку программы на различных входных данных.

Задания для выполнения

Section titled “Задания для выполнения”

1. Создание и базовые операции с объектом

Section titled “1. Создание и базовые операции с объектом”
  1. Создайте объект student с использованием литерала объекта. Объект должен содержать следующие свойства:
    • firstName (строка, ваше имя)
    • lastName (строка, ваша фамилия)
    • age (число, ваш возраст)
    • major (строка, например, “Информационные системы”)
    • courses (массив строк, например, ["Математика", "Программирование", "Базы данных"])
  2. Выведите в консоль значение свойства firstName используя точечную нотацию.
  3. Выведите в консоль значение свойства major используя нотацию квадратных скобок.
  4. Измените значение свойства age на новый возраст.
  5. Добавьте новое свойство gpa (число, например, 4.5) к объекту student.
  6. Удалите свойство courses из объекта student.
  7. Выведите весь объект student в консоль после всех изменений.
  1. Создайте объект rectangle с двумя свойствами: width (число) и height (число).
  2. Добавьте к объекту rectangle метод getArea, который будет возвращать площадь прямоугольника (используйте свойства width и height объекта rectangle).
  3. Добавьте к объекту rectangle метод getPerimeter, который будет возвращать периметр прямоугольника (используйте свойства width и height объекта rectangle).
  4. Создайте второй объект square с одним свойством side (число).
  5. Добавьте к объекту square метод getArea, который будет возвращать площадь квадрата (используйте свойство side объекта square).
  6. Добавьте к объекту square метод getPerimeter, который будет возвращать периметр квадрата (используйте свойство side объекта square).
  7. Вызовите методы getArea и getPerimeter для обоих объектов (rectangle и square) и выведите результаты в консоль.

3. Встроенные методы Object

Section titled “3. Встроенные методы Object”
  1. Создайте два объекта: userProfile = { name: "Алексей", email: "alex@example.com" } и userSettings = { theme: "dark", notifications: true }.
  2. Используйте Object.assign() для объединения userSettings в userProfile. Выведите объединенный объект в консоль.
  3. Создайте объект constants = { PI: 3.14159, E: 2.71828 }.
  4. Используйте Object.freeze() для заморозки объекта constants. Попробуйте изменить свойство PI и добавить новое свойство GRAVITY. Выведите constants в консоль и объясните результат.
  5. Используйте Object.keys(), Object.values(), Object.entries() для объекта userProfile (после объединения) и выведите результаты в консоль.

4. Создание простой системы управления инвентарем

Section titled “4. Создание простой системы управления инвентарем”

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

  1. Создайте объект inventory.
  2. Добавьте в inventory свойство products, которое будет массивом объектов. Каждый объект в массиве products должен представлять товар и иметь следующие свойства:
    • id (уникальный числовой идентификатор)
    • name (строка, название товара)
    • price (число, цена за единицу)
    • quantity (число, количество на складе)
  3. Добавьте в объект inventory метод addProduct(id, name, price, quantity), который будет принимать параметры нового товара и добавлять его в массив products. Перед добавлением убедитесь, что товара с таким id еще нет в инвентаре. Если есть, выведите сообщение об ошибке.
  4. Добавьте в объект inventory метод removeProduct(id), который будет удалять товар из массива products по его id. Если товар не найден, выведите сообщение об ошибке.
  5. Добавьте в объект inventory метод updateProductQuantity(id, newQuantity), который будет обновлять количество товара на складе по его id. Если товар не найден, выведите сообщение об ошибке. newQuantity должно быть неотрицательным числом.
  6. Добавьте в объект inventory метод getTotalValue(), который будет возвращать общую стоимость всего инвентаря (сумму price * quantity для всех товаров).
  7. Добавьте в объект inventory метод listAllProducts(), который будет выводить в консоль информацию о каждом товаре в формате: ID: [id], Название: [name], Цена: [price], Количество: [quantity].

Протестируйте вашу систему:

  • Добавьте 3-4 разных товара.
  • Попробуйте добавить товар с уже существующим ID.
  • Обновите количество одного из товаров.
  • Попробуйте обновить количество несуществующего товара.
  • Удалите один товар.
  • Попробуйте удалить несуществующий товар.
  • Выведите общую стоимость инвентаря.
  • Выведите список всех товаров.
  1. Объясните разницу между точечной нотацией и нотацией квадратных скобок при доступе к свойствам объекта.
  2. В каких случаях предпочтительнее использовать Object.freeze() вместо Object.seal()?
  3. Каково назначение метода Object.assign()? Приведите пример его использования.
  4. Как можно проверить, существует ли определенное свойство в объекте?
  5. Опишите, как методы Object.keys(), Object.values() и Object.entries() помогают при работе с объектами.

Рекомендуемая литература

Section titled “Рекомендуемая литература”
  1. Объекты: основы - Современный учебник JavaScript.
  2. Свойства объектов - MDN Web Docs.
  3. Object.assign() - MDN Web Docs.
  4. Object.freeze() - MDN Web Docs.
  5. Object.seal() - MDN Web Docs.
  6. Object.keys(), Object.values(), Object.entries() - MDN Web Docs.