Публичные и приватные поля классов
Часть раздела Объектно-ориентированное программирование путешествия по JavaScript на Coddy — урок 18 из 56.
В классах JavaScript мы можем определять два типа полей класса: публичные (public) и приватные (private).
Публичные поля доступны извне класса и могут быть использованы кем угодно.
Создайте класс с публичными полями:
class Student {
name = '';
grade = 0;
constructor(name, grade) {
this.name = name;
this.grade = grade;
}
}Создайте экземпляр student:
const student = new Student('Alice', 95);Доступ к публичным полям извне класса:
console.log(student.name); // Вывод: "Alice"
student.grade = 98;
console.log(student.grade); // Вывод: 98Приватные поля обозначаются символом # и к ним можно получить доступ только внутри класса:
class Student {
name = '';
#grade = 0;
constructor(name, grade) {
this.name = name;
this.#grade = grade;
}
getGrade() {
return this.#grade;
}
updateGrade(newGrade) {
this.#grade = newGrade;
}
}Использование приватных полей:
const student = new Student('Bob', 87);
console.log(student.name); // Вывод: "Bob"
// Доступ к приватному полю с помощью метода
console.log(student.getGrade()); // Вывод: 87
// Обновление приватного поля с помощью метода
student.updateGrade(92);
console.log(student.getGrade()); // Вывод: 92
// Это вызовет ошибку:
// console.log(student.#grade); // SyntaxErrorЗадание
- Добавьте два поля в класс с именем UserAccount:
- Публичное поле
username - Приватное поле
#password
- Публичное поле
- Добавьте конструктор, который принимает параметры
usernameиpassword
Шпаргалка
Классы JavaScript поддерживают публичные и приватные поля.
Публичные поля доступны извне класса:
class Student {
name = '';
grade = 0;
constructor(name, grade) {
this.name = name;
this.grade = grade;
}
}
const student = new Student('Alice', 95);
console.log(student.name); // Output: "Alice"
student.grade = 98;Приватные поля используют символ # и могут быть доступны только внутри класса:
class Student {
name = '';
#grade = 0;
constructor(name, grade) {
this.name = name;
this.#grade = grade;
}
getGrade() {
return this.#grade;
}
updateGrade(newGrade) {
this.#grade = newGrade;
}
}
const student = new Student('Bob', 87);
console.log(student.getGrade()); // Output: 87
student.updateGrade(92);
// student.#grade would cause a SyntaxErrorПопробуйте сами
import { UserAccount } from './userAccount.js';
// Тестовый код - не изменять
const user = new UserAccount("alice", "secret123");
console.log(user.username); // Должно вывести "alice"
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
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Статические методы и свойства
Уровень класса против уровня экземпляраСтатические свойстваСтатические вспомогательные методыЗадание на закрепление