Menu
Coddy logo textTech

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

Часть раздела Объектно-ориентированное программирование путешествия по JavaScript на Coddy — урок 19 из 56.

Приватные методы в классах JavaScript позволяют скрыть детали реализации и предотвратить внешний доступ к внутренней функциональности.

Начиная с ES2022, приватные методы могут быть определены с использованием префикса #:

class Counter {
  #count = 0;
  
  // Создаем приватный метод
  #increment() {
    this.#count++;
  }
  
  // Публичный метод, который использует приватный метод
  addOne() {
    this.#increment();
    return this.#count;
  }
}

Давайте создадим экземпляр Counter:

const myCounter = new Counter();

Мы можем вызвать публичный метод:

console.log(myCounter.addOne()); // Результат: 1

Но попытка прямого доступа к приватному методу вызовет ошибку:

myCounter.#increment(); // Ошибка: Приватный метод недоступен вне класса

Приватные методы помогают поддерживать инкапсуляцию, скрывая детали внутренней реализации от внешнего мира.

challenge icon

Задание

Вам предоставлен класс MessageBox, который хранит сообщения. Ваша задача — добавить приватный метод с именем #isValidMessage(text), который проверяет сообщения. Он должен:

  • Возвращать true, если текст не пустой и содержит менее 100 символов
  • Возвращать false в противном случае

Шпаргалка

Приватные методы в классах JavaScript определяются с использованием префикса # и могут быть доступны только внутри класса:

class Counter {
  #count = 0;
  
  // Приватный метод
  #increment() {
    this.#count++;
  }
  
  // Публичный метод, который использует приватный метод
  addOne() {
    this.#increment();
    return this.#count;
  }
}

Приватные методы не могут быть доступны извне класса:

const myCounter = new Counter();
myCounter.addOne(); // Работает
myCounter.#increment(); // Ошибка: Приватный метод недоступен

Приватные методы помогают поддерживать инкапсуляцию, скрывая детали внутренней реализации.

Попробуйте сами

import { MessageBox } from './messageBox.js';

// Использование окна сообщения
const box = new MessageBox();

console.log(box.setMessage("Hello"));    // "Message set!" (использует #isValidMessage)
console.log(box.setMessage(""));         // "Invalid message!" (использует #isValidMessage)
quiz iconПроверьте себя

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

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