Методы, изменяющие состояние
Часть раздела Объектно-ориентированное программирование путешествия по JavaScript на Coddy — урок 15 из 56.
Методы в классах JavaScript могут изменять состояние (свойства) объекта. Это одна из ключевых особенностей объектно-ориентированного программирования.
Давайте создадим простой класс BankAccount:
class BankAccount {
constructor(owner, balance = 0) {
this.owner = owner;
this.balance = balance;
}
deposit(amount) {
this.balance += amount;
}
}Теперь давайте создадим экземпляр и изменим его состояние:
const johnsAccount = new BankAccount("John", 100);
console.log(johnsAccount.balance); // Выводит: 100
johnsAccount.deposit(50);
console.log(johnsAccount.balance); // Выводит: 150В этом примере метод deposit() изменяет внутреннее состояние (свойство balance) экземпляра BankAccount.
Мы можем добавить больше методов, изменяющих состояние:
class BankAccount {
constructor(owner, balance = 0) {
this.owner = owner;
this.balance = balance;
}
deposit(amount) {
this.balance += amount;
}
withdraw(amount) {
if (amount <= this.balance) {
this.balance -= amount;
}
}
transfer(amount, toAccount) {
if (amount <= this.balance) {
this.balance -= amount;
toAccount.balance += amount;
}
}
}Теперь мы можем управлять нашим банковским счетом несколькими способами.
Задание
Вам предоставлен класс Thermostat. Ваша задача — добавить методы, которые изменяют состояние его температуры:
increaseTemp()— увеличивает температуру на 1 градусdecreaseTemp()— уменьшает температуру на 1 градус
Шпаргалка
Методы в классах JavaScript могут изменять состояние (свойства) объекта.
Пример класса с методами, изменяющими состояние:
class BankAccount {
constructor(owner, balance = 0) {
this.owner = owner;
this.balance = balance;
}
deposit(amount) {
this.balance += amount;
}
withdraw(amount) {
if (amount <= this.balance) {
this.balance -= amount;
}
}
transfer(amount, toAccount) {
if (amount <= this.balance) {
this.balance -= amount;
toAccount.balance += amount;
}
}
}Использование методов, изменяющих состояние:
const johnsAccount = new BankAccount("John", 100);
console.log(johnsAccount.balance); // Outputs: 100
johnsAccount.deposit(50);
console.log(johnsAccount.balance); // Outputs: 150Попробуйте сами
import { Thermostat } from './thermostat.js';
// Тестовый код — не изменять
const livingRoom = new Thermostat("Living Room", 20);
livingRoom.increaseTemp();
livingRoom.increaseTemp();
console.log(livingRoom.currentTemp); // Должно вывести 22
livingRoom.decreaseTemp();
console.log(livingRoom.currentTemp); // Должно вывести 21
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Объекты и ключевое слово this
Краткий обзор: ОбъектыДобавление методов в объектыПонимание ключевого слова thisФункции-конструкторыКлючевое слово newИтоговое испытание7Наследование и ключевое слово extends
НаследованиеОтношение «is-a»Ключевое слово extendsМетод super()Наследование свойств и методовИтоговое испытание10Полиморфизм
Что такое полиморфизм?Переопределение унаследованных методовИспользование superИтоговое задание13Композиция против наследования
Отношения «has-a» и «is-a»Ограничения глубокого наследованияСоздание объектов2Организация кода
Что такое модули?Экспорт с помощью exportИмпорт с помощью importDefault против именованных экспортов5Инкапсуляция и доступ
ИнкапсуляцияПубличные и приватные поля классовПриватные методыЗадание на повторение8Организация кода ООП
Организация классов в модули11Проект: Отрисовщик фигур
Настройка: Класс Shape и экспортНаследование класса Circle14Система управления библиотекой
Проектирование библиотекиКласс Book с использованием композиции6Проект: Простой банковский счет
Класс BankAccountПополнение и снятие средств9Статические методы и свойства
Уровень класса против уровня экземпляраСтатические свойстваСтатические вспомогательные методыЗадание на закрепление