JavaRush /Курсы /Модуль 1: Web Core /Конструкторы и методы

Конструкторы и методы

Модуль 1: Web Core
20 уровень , 5 лекция
Открыта

6.1 Конструкторы классов

Конструкторы и методы классов являются основными элементами объектно-ориентированного программирования в JavaScript. Они позволяют создавать и инициализировать объекты, а также определять их поведение. Ниже мы рассмотрим, как работают конструкторы и методы классов, а также как их использовать.

Что такое конструктор?

Конструктор — это специальный метод класса, который вызывается при создании нового экземпляра класса. Он используется для инициализации объекта, установки значений его свойств и выполнения других начальных задач.

Определение конструктора

Конструктор определяется с использованием ключевого слова constructor. Внутри конструктора с помощью ключевого слова this можно обращаться к свойствам и методам объекта.

Синтаксис:

    
      class ClassName {
        constructor(параметры) {
          // Инициализация объекта
        }
      }
    
  

Пример:

В классе Person метод constructor принимает два параметра: name и age.

Эти параметры используются для инициализации свойств name и age создаваемого объекта.

JavaScript
    
      class Person {
        constructor(name, age) {
          this.name = name;
          this.age = age;
        }
      }

      const person1 = new Person('Alice', 30);
      const person2 = new Person('Bob', 25);

      console.log(person1.name); // Выведет: Alice
      console.log(person2.age);  // Выведет: 25
    
  

Конструктор по умолчанию

Если конструктор не определен явно, JavaScript автоматически создает пустой конструктор по умолчанию.

Пример:

JavaScript
    
      class Animal {}

      const animal = new Animal();
      console.log(animal); // Выведет содержимое класса Animal {}
    
  

6.2 Методы классов

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

Синтаксис:

    
      class ClassName {
        constructor(параметры) { // Инициализация объекта } 
        метод1() { // Тело метода } 
        метод2() { // Тело метода }
      }
    
  

Пример:

JavaScript
    
      class Car {
        constructor(brand, model) {
          this.brand = brand;
          this.model = model;
          this.mileage = 0;
        }

        drive(distance) {
          this.mileage += distance;
          console.log(`${this.brand} ${this.model} drove ${distance} miles. Total mileage: ${this.mileage}`);
        }

        getDetails() {
          return `${this.brand} ${this.model}, Mileage: ${this.mileage}`;
        }
      }

      const myCar = new Car('Toyota', 'Camry');
      myCar.drive(50); // "Toyota Camry drove 50 miles. Total mileage: 50"

      console.log(myCar.getDetails()); // "Toyota Camry, Mileage: 50"
    
  

Объяснение:

  • В классе Car определены два метода: drive() и getDetails()
  • Метод drive() увеличивает пробег автомобиля и выводит информацию о пройденном расстоянии
  • Метод getDetails() возвращает строку с информацией об автомобиле

6.3 Приватные методы

С введением новых спецификаций ECMAScript появилась возможность создавать приватные методы и свойства, которые недоступны за пределами класса. Для этого используется символ # как часть имени.

Пример приватных методов и свойств:

JavaScript
    
      class BankAccount {
        #balance = 0;

        constructor(initialBalance) {
          this.#balance = initialBalance;
        }

        #validateAmount(amount) {
          if (amount <= 0) {
            throw new Error('Amount must be positive.');
          }
        }

        deposit(amount) {
          this.#validateAmount(amount);
          this.#balance += amount;
          console.log(`Deposited ${amount}. New balance: ${this.#balance}`);
        }

        withdraw(amount) {
          this.#validateAmount(amount);
          if (amount > this.#balance) {
            throw new Error('Insufficient funds.');
          }
          this.#balance -= amount;
          console.log(`Withdrew ${amount}. New balance: ${this.#balance}`);
        }

        getBalance() {
          return this.#balance;
        }
      }

      const account = new BankAccount(100);
      account.deposit(50); // Выведет: Deposited 50. New balance: 150
      account.withdraw(30); // Выведет: Withdrew 30. New balance: 120
      console.log(account.getBalance()); // Выведет: 120

      // Попытка доступа к приватному методу или свойству вызовет ошибку
      account.#balance; // SyntaxError
      account.#validateAmount(50); // SyntaxError
    
  
1
Задача
Модуль 1: Web Core, 20 уровень, 5 лекция
Недоступна
Класс Product
Класс Product
1
Задача
Модуль 1: Web Core, 20 уровень, 5 лекция
Недоступна
Класс Library
Класс Library
1
Опрос
Знакомство с классами, 20 уровень, 5 лекция
Недоступен
Знакомство с классами
Знакомство с классами
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Nataly Уровень 47
24 января 2025
В первой задаче должно быть более 2 экземпляров, иначе будет ошибка