Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник JavaScript

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 вне класса — синтаксическая ошибка, код даже не запустится.

См. также

  • class — Объявляет класс — шаблон для создания объектов с общими методами.
  • get / set — Свойства, за которыми скрываются функции: чтение вызывает get, запись — set.
  • static — Метод или свойство самого класса, а не его объектов.

В учебнике

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.