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:

javascriptclass User {
  constructor(name) {
    this._name = name;
  }
  
  show() {
    return this._name;
  }
}

Låt oss skapa ett objekt av klassen:

javascriptlet user = new User('john', 'smit');

Låt oss anropa metoden som visar värdet på vår egenskap:

javascriptconsole.log(user.show());

Ett försök att komma åt egenskapen utifrån klassen kommer inte att ge ett fel:

javascriptconsole.log(user._name); // inget fel
Задание 1

Gör följande egenskaper privata i koden nedan:

javascriptclass Employee {
  constructor(name, salary) {
    this._name = name;
    this._salary = salary;
  }
  
  getName() {
    return this._name;
  }
  getSalary() {
    return this._salary;
  }
}
Задание 2

Gör hjälpmetoden privat i följande kod:

javascriptclass Employee {
  constructor(name, salary) {
    this.name = name;
    this.salary = salary;
  }
  
  getSalary() {
    return this._addSign(this.salary);
  }
  
  _addSign(num) {
    return num + ' kr';
  }
}