Privatitet i gammal stil i OOP i JavaScript
Deklaration av privata egenskaper och metoder
via symbolen # dök upp i JavaScript
alldeles nyligen. Före det var man tvungen
att använda ett speciellt knepigt
knep.
Kärnan i detta knep är att man kommer överens om att namnen på privata egenskaper och metoder ska börja med understreck. I verkligheten kommer sådana namn inte att vara privata, men vi kommer överens om att vi inte ska använda dem utanför klassen.
Låt oss prova. Låt oss skapa en privat egenskap i den här stilen:
class User {
constructor(name) {
this._name = name;
}
show() {
return this._name;
}
}
Låt oss skapa ett objekt av klassen:
let user = new User('john', 'smit');
Låt oss anropa metoden som visar värdet på vår egenskap:
console.log(user.show());
Ett försök att komma åt egenskapen utifrån klassen kommer inte att ge ett fel:
console.log(user._name); // inget fel
Gör följande egenskaper privata i koden nedan:
class Employee {
constructor(name, salary) {
this._name = name;
this._salary = salary;
}
getName() {
return this._name;
}
getSalary() {
return this._salary;
}
}
Gör hjälpmetoden privat i följande kod:
class Employee {
constructor(name, salary) {
this.name = name;
this.salary = salary;
}
getSalary() {
return this._addSign(this.salary);
}
_addSign(num) {
return num + ' kr';
}
}