Практическая работа №4
Объекты, работа с объектами, методы для работы с объектами
Section titled “Объекты, работа с объектами, методы для работы с объектами”Цель работы:
- Закрепить теоретические знания об объектах в JavaScript.
- Научиться создавать и инициализировать объекты.
- Освоить работу со свойствами и методами объектов.
- Применять встроенные методы для работы с объектами.
Основные теоретические положения
Section titled “Основные теоретические положения”1. Что такое объект в JavaScript?
Section titled “1. Что такое объект в JavaScript?”В JavaScript объект — это коллекция свойств, где каждое свойство состоит из пары “ключ-значение”. Ключ (или имя свойства) всегда является строкой (или символом), а значение может быть любым типом данных, включая другие объекты, функции или примитивы (строки, числа, булевы значения и т.д.). Объекты являются фундаментальной частью JavaScript и используются для моделирования реальных сущностей, организации данных и создания более сложной логики.
// Пример простого объектаlet user = { name: "Иван", age: 30, isAdmin: true};2. Создание объектов
Section titled “2. Создание объектов”Существует несколько способов создания объектов в JavaScript:
2.1. Литерал объекта (Object Literal)
Section titled “2.1. Литерал объекта (Object Literal)”Это самый простой и распространенный способ создания объекта. Вы определяете объект, заключая пары “ключ-значение” в фигурные скобки {}.
let person = { firstName: "Анна", lastName: "Смирнова", age: 25};2.2. Конструктор Object()
Section titled “2.2. Конструктор Object()”Менее распространенный способ, но также допустимый. Создает пустой объект, к которому затем можно добавлять свойства.
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]); // 30console.log(user["is Admin"]); // Если бы свойство называлось "is Admin"4. Изменение и добавление свойств
Section titled “4. Изменение и добавление свойств”Свойства объектов можно изменять или добавлять новые, просто присваивая им значения.
user.age = 31; // Изменениеuser.city = "Москва"; // Добавление5. Удаление свойств
Section titled “5. Удаление свойств”Для удаления свойства из объекта используется оператор 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): Возвращает массив из собственных перечисляемых пар [ключ, значение] свойств объекта.
Общие требования
Section titled “Общие требования”Для каждого задания необходимо:
- Написать программу на языке программирования JavaScript;
- Произвести отладку программы на различных входных данных.
Задания для выполнения
Section titled “Задания для выполнения”1. Создание и базовые операции с объектом
Section titled “1. Создание и базовые операции с объектом”- Создайте объект
studentс использованием литерала объекта. Объект должен содержать следующие свойства:firstName(строка, ваше имя)lastName(строка, ваша фамилия)age(число, ваш возраст)major(строка, например, “Информационные системы”)courses(массив строк, например,["Математика", "Программирование", "Базы данных"])
- Выведите в консоль значение свойства
firstNameиспользуя точечную нотацию. - Выведите в консоль значение свойства
majorиспользуя нотацию квадратных скобок. - Измените значение свойства
ageна новый возраст. - Добавьте новое свойство
gpa(число, например, 4.5) к объектуstudent. - Удалите свойство
coursesиз объектаstudent. - Выведите весь объект
studentв консоль после всех изменений.
2. Объекты с методами
Section titled “2. Объекты с методами”- Создайте объект
rectangleс двумя свойствами:width(число) иheight(число). - Добавьте к объекту
rectangleметодgetArea, который будет возвращать площадь прямоугольника (используйте свойстваwidthиheightобъектаrectangle). - Добавьте к объекту
rectangleметодgetPerimeter, который будет возвращать периметр прямоугольника (используйте свойстваwidthиheightобъектаrectangle). - Создайте второй объект
squareс одним свойствомside(число). - Добавьте к объекту
squareметодgetArea, который будет возвращать площадь квадрата (используйте свойствоsideобъектаsquare). - Добавьте к объекту
squareметодgetPerimeter, который будет возвращать периметр квадрата (используйте свойствоsideобъектаsquare). - Вызовите методы
getAreaиgetPerimeterдля обоих объектов (rectangleиsquare) и выведите результаты в консоль.
3. Встроенные методы Object
Section titled “3. Встроенные методы Object”- Создайте два объекта:
userProfile = { name: "Алексей", email: "alex@example.com" }иuserSettings = { theme: "dark", notifications: true }. - Используйте
Object.assign()для объединенияuserSettingsвuserProfile. Выведите объединенный объект в консоль. - Создайте объект
constants = { PI: 3.14159, E: 2.71828 }. - Используйте
Object.freeze()для заморозки объектаconstants. Попробуйте изменить свойствоPIи добавить новое свойствоGRAVITY. Выведитеconstantsв консоль и объясните результат. - Используйте
Object.keys(),Object.values(),Object.entries()для объектаuserProfile(после объединения) и выведите результаты в консоль.
4. Создание простой системы управления инвентарем
Section titled “4. Создание простой системы управления инвентарем”Разработайте небольшую систему управления инвентарем для магазина. Система должна представлять собой объект inventory, который будет хранить информацию о различных товарах.
- Создайте объект
inventory. - Добавьте в
inventoryсвойствоproducts, которое будет массивом объектов. Каждый объект в массивеproductsдолжен представлять товар и иметь следующие свойства:id(уникальный числовой идентификатор)name(строка, название товара)price(число, цена за единицу)quantity(число, количество на складе)
- Добавьте в объект
inventoryметодaddProduct(id, name, price, quantity), который будет принимать параметры нового товара и добавлять его в массивproducts. Перед добавлением убедитесь, что товара с такимidеще нет в инвентаре. Если есть, выведите сообщение об ошибке. - Добавьте в объект
inventoryметодremoveProduct(id), который будет удалять товар из массиваproductsпо егоid. Если товар не найден, выведите сообщение об ошибке. - Добавьте в объект
inventoryметодupdateProductQuantity(id, newQuantity), который будет обновлять количество товара на складе по егоid. Если товар не найден, выведите сообщение об ошибке.newQuantityдолжно быть неотрицательным числом. - Добавьте в объект
inventoryметодgetTotalValue(), который будет возвращать общую стоимость всего инвентаря (суммуprice * quantityдля всех товаров). - Добавьте в объект
inventoryметодlistAllProducts(), который будет выводить в консоль информацию о каждом товаре в формате:ID: [id], Название: [name], Цена: [price], Количество: [quantity].
Протестируйте вашу систему:
- Добавьте 3-4 разных товара.
- Попробуйте добавить товар с уже существующим ID.
- Обновите количество одного из товаров.
- Попробуйте обновить количество несуществующего товара.
- Удалите один товар.
- Попробуйте удалить несуществующий товар.
- Выведите общую стоимость инвентаря.
- Выведите список всех товаров.
Контрольные вопросы
Section titled “Контрольные вопросы”- Объясните разницу между точечной нотацией и нотацией квадратных скобок при доступе к свойствам объекта.
- В каких случаях предпочтительнее использовать
Object.freeze()вместоObject.seal()? - Каково назначение метода
Object.assign()? Приведите пример его использования. - Как можно проверить, существует ли определенное свойство в объекте?
- Опишите, как методы
Object.keys(),Object.values()иObject.entries()помогают при работе с объектами.
Рекомендуемая литература
Section titled “Рекомендуемая литература”- Объекты: основы - Современный учебник JavaScript.
- Свойства объектов - MDN Web Docs.
- Object.assign() - MDN Web Docs.
- Object.freeze() - MDN Web Docs.
- Object.seal() - MDN Web Docs.
- Object.keys(), Object.values(), Object.entries() - MDN Web Docs.