Problema e vetive private në trashëgiminë në OOP në JavaScript

Fakti që vetitë private nuk trashëgohen, mund të çojë në një problem të papritur. Le të shohim një shembull. Le të themi se kemi klasën prind të mëposhtme me një veti private:

javascriptclass User {
  #age;
  
  setAge(age) {
    this.#age = age;
  }
  getAge() {
    return this.#age;
  }
}

Le të themi se në klasën e fëmijës ne kemi vendosur të bëjmë një metodë që do të rrisë moshën me një. Megjithatë, përpjekja për të ndryshuar vetinë private të prindit do të çojë në gabim:

javascriptclass Student extends User {
  incAge() {
    this.#age++; // gabim
  }
}

Gabimi do të zhduket nëse në klasën e fëmijës deklarojmë vetinë private #age:

javascriptclass Student extends User {
  #age;
  
  incAge() {
    this.#age++;
  }
}

Këtu na pret kurtha! Në realitet ne kemi krijuar dy veti private: një në prind dhe një në fëmijë. Dhe ato punojnë plotësisht të pavarura. Kjo do të thotë që metodat e prindit do të ndryshojnë vetinë e tyre, dhe metodat e fëmijës - vetën e tyre.

Ky problem në fakt ka një zgjidhje. Thjesht duhet të manipilohen vetitë private të prindit përmes metodave të atij prindi. Le të rishkruajmë kodin tonë në përputhje me këtë:

javascriptclass Student extends User {
  incAge() {
    let age = this.getAge();
    age++;
    this.setAge(age);
  }
}

Mund të thjeshtohet:

javascriptclass Student extends User {
  incAge() {
    this.setAge(++this.getAge());
  }
}
Задание 1

Në kodin vijues në klasën e fëmijës ripërcaktohet metoda e prindit. Korrigjoni problemet në këtë kod:

javascriptclass User {
  #name;
  
  setName(name) {
    this.#name = name;
  }
  getName() {
    return this.#name;
  }
}

class Employee extends User {
  setName(name) {
    if (name.length > 0) {
      this.#name = name;
    }
  }
}