А вы знали, что в современном JavaScript есть поддержка специального синтаксиса для создания приватных переменных и функций?
По-умолчанию все методы и свойства класса являются публичными (общедоступными). Для того, чтобы сделать их приватными, достаточно начинать их названия с решетки #
.
class Developer {
name;
#age; // Мой возраст никто не должен знать!
constructor(name, age) {
this.name = name;
this.#age = age;
}
};
const Mikhail = new Developer('Mikhail', 35);
console.log(Mikhail.name); // Mikhail
console.log(Mikhail.age); // undefined
console.log(Mikhail.#age); // Error! Uncaught SyntaxError: Private field '#age' must be declared in an enclosing class
Свойство Mikhail.name
доступно, так как является публичным, в то время как возраст является приватными потому, что начинается с #
. Тоже самое работает и с методами:
class Developer {
name;
#age; // Мой возраст никто не должен знать!
constructor(name, age) {
this.name = name;
this.#age = age;
}
#getAgeInDogYears() {
return this.#age * 7;
}
};
Метод getAgeInDogYears
может быть вызван только внутри класса. Мы можем дать ему доступ из вне, используя внутри публичного метода:
class Developer {
name = '';
#age = 0;
#ageInDogYears = 0;
constructor(name, age) {
this.name = name;
this.#age = age;
this.#ageInDogYears = this.#getAgeInDogYears();
}
#getAgeInDogYears() {
return this.#age * 7;
}
log() {
console.log(this.name);
console.log(this.#age);
console.log(this.#ageInDogYears);
}
};
const Mikhail = new Developer('Mikhail', 35);
Mikhail.log();
// Mikhail
// 35
// 245
Добавление такого синтаксиса в JavaScript стало приятным дополнением к современному JS. Еще лучше то, что делается это простым добавлением решетки #
вначале.