Проверяет знание синтаксиса приватных полей и методов в классах JavaScript и понимание инкапсуляции на уровне языка.
Приватные поля — это механизм инкапсуляции, встроенный в сам язык JavaScript начиная со стандарта ES2022. До этого разработчики использовали соглашения об именовании (например, _name) или замыкания, но они не давали настоящей защиты: к таким полям всё равно можно было обратиться извне.
Приватное поле объявляется с символом # перед именем. Обращаться к нему можно только внутри тела класса — в методах, геттерах, сеттерах и конструкторе. Снаружи такое поле не существует: попытка прочитать или записать его вызовет SyntaxError ещё на этапе парсинга кода.
class Counter {
#count = 0; // приватное поле
increment() {
this.#count++;
return this.#count;
}
get value() {
return this.#count;
}
}
const c = new Counter();
c.increment();
console.log(c.value); // 1
console.log(c.#count); // SyntaxError
Помимо полей, приватными могут быть методы (#helper()) и статические члены (static #instances). Это удобно для служебной логики, которую не нужно выставлять наружу. Также поддерживаются приватные геттеры и сеттеры.
class User {
#password;
static #count = 0;
constructor(password) {
this.#password = password;
User.#count++;
}
#hash() { return this.#password.split('').reverse().join(''); }
check(input) { return this.#hash() === input; }
}
Важно помнить: приватность обеспечивается на уровне синтаксиса, а не рантайма через Proxy или Reflect. Это делает код предсказуемым и защищённым от случайного вмешательства.
Итог: используйте приватные поля #, когда нужно скрыть детали реализации класса и защитить его состояние от внешнего доступа — это современный и надёжный способ инкапсуляции в JavaScript.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию