Yksityisyys vanhanaikaisessa OOP:ssa JavaScriptissä
Yksityisten ominaisuuksien ja menetelmien määrittely
symbolin # kautta ilmestyi JavaScriptiin
vasta äskettäin. Ennen sitä oli pakko
käyttää erikoista ovelaa
menetelmää.
Tämän menetelmän ydin on sopia, että yksityisten ominaisuuksien ja menetelmien nimien on alettava alaviivalla. Todellisuudessa tällaiset nimet eivät ole yksityisiä, mutta sovimme, että emme käytä niitä luokan ulkopuolelta.
Kokeillaan. Tehdään yksityinen ominaisuus tällä tyylillä:
class User {
constructor(name) {
this._name = name;
}
show() {
return this._name;
}
}
Luodaan luokan olio:
let user = new User('john', 'smit');
Kutsutaan metodia, joka tulostaa ominaisuutemme arvon:
console.log(user.show());
Yritys viitata ominaisuuteen luokan ulkopuolelta ei aiheuta virhettä:
console.log(user._name); // ei virhettä
Tee seuraavassa koodissa ominaisuudet yksityisiksi:
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
getName() {
return this.name;
}
getSalary() {
return this.salary;
}
}
Tee seuraavassa koodissa apu- metodi yksityiseksi:
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
getSalary() {
return this.addSign(this.salary);
}
addSign(num) {
return num + '€';
}
}