Prywatność w starym stylu w OOP w JavaScript
Deklarowanie prywatnych właściwości i metod
poprzez symbol # pojawiło się w JavaScript
całkiem niedawno. Wcześniej trzeba było
używać specjalnej, sprytnej
sztuczki.
Istota tej sztuczki polega na uzgodnieniu, że nazwy prywatnych właściwości i metod powinny zaczynać się od znaku podkreślenia. W rzeczywistości takie nazwy nie będą prywatne, ale umawiamy się, że nie będziemy ich używać na zewnątrz klasy.
Spróbujmy. Zróbmy prywatną właściwość w tym stylu:
class User {
constructor(name) {
this._name = name;
}
show() {
return this._name;
}
}
Stwórzmy obiekt klasy:
let user = new User('john', 'smit');
Wywołajmy metodę, która wyświetla wartość naszej właściwości:
console.log(user.show());
Próba odwołania się do właściwości z zewnątrz klasy nie spowoduje błędu:
console.log(user._name); // nie ma błędu
W następnym kodzie uczynij właściwości prywatnymi:
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
getName() {
return this.name;
}
getSalary() {
return this.salary;
}
}
W następnym kodzie uczynij metodę pomocniczą prywatną:
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
getSalary() {
return this.addSign(this.salary);
}
addSign(num) {
return num + ' zł';
}
}