Приватность в старом стиле в ООП в JavaScript
Объявление приватных свойств и методов
через символ #
появилось в JavaScript
совсем недавно. До этого приходилось
пользоваться специальным хитрым
приемом.
Суть этого приема в том, что заключается соглашение о том, что имена приватных свойств и методов должны начинаться с символа подчеркивания. Реально такие имена не будут приватными, но мы договариваемся о том, что не будем их использовать извне класса.
Давайте попробуем. Сделаем приватное свойство в таком стиле:
class User {
constructor(name) {
this._name = name;
}
show() {
return this._name;
}
}
Создадим объект класса:
let user = new User('john', 'smit');
Вызовем метод, выводящий значение нашего свойства:
console.log(user.show());
Попытка обратиться к свойству извне класса не приведет к ошибке:
console.log(user._name); // ошибки нет
В следующем коде сделайте свойства приватными:
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
getName() {
return this.name;
}
getSalary() {
return this.salary;
}
}
В следующем коде сделайте вспомогательный метод приватным:
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
getSalary() {
return this.addSign(this.salary);
}
addSign(num) {
return num + '$';
}
}