Menu
Coddy logo textTech

Методы, изменяющие состояние

Часть раздела Объектно-ориентированное программирование путешествия по 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;
    }
  }
}

Теперь мы можем управлять нашим банковским счетом несколькими способами.

challenge icon

Задание

Вам предоставлен класс Thermostat. Ваша задача — добавить методы, которые изменяют состояние его температуры:

  1. increaseTemp() — увеличивает температуру на 1 градус
  2. 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
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование