Private fields (#)
Поля и методы, доступные только внутри класса.
Доступно с: ES2022
Синтаксис
#field / #method() { … }Примеры
Баланс нельзя изменить снаружи:
class BankAccount {
#balance = 0;
deposit(amount) {
if (amount <= 0) throw new RangeError('Amount must be positive');
this.#balance += amount;
}
get balance() {
return this.#balance;
}
}
const account = new BankAccount();
account.deposit(100);
console.log(account.balance);
console.log(account['#balance']);Результат:
100
undefinedПроверка наличия приватного поля:
class Point {
#x = 0;
static isPoint(value) {
return #x in value;
}
}
console.log(Point.isPoint(new Point()), Point.isPoint({}));Результат:
true falseПримечания
Решётка — часть имени: #balance и balance — разные поля. Обращение к obj.#balance вне класса — синтаксическая ошибка, код даже не запустится.
См. также
В учебнике
- Приватные и статические члены — Приватные поля и методы классов JavaScript через #, инкапсуляция, статические методы и свойства.