Приватные методы
Часть раздела Объектно-ориентированное программирование путешествия по 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(); // Ошибка: Приватный метод недоступен вне классаПриватные методы помогают поддерживать инкапсуляцию, скрывая детали внутренней реализации от внешнего мира.
Задание
Вам предоставлен класс 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)
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
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Статические методы и свойства
Уровень класса против уровня экземпляраСтатические свойстваСтатические вспомогательные методыЗадание на закрепление