Προστατευμένες Μέθοδοι στην Αντικειμενοστραφή Προγραμματισμό σε JavaScript

Οι ιδιωτικές μέθοδοι δεν κληρονομούνται ούτε είναι ορατές από έξω από την κλάση. Μερικές φορές, ωστόσο, χρειαζόμαστε μεθόδους, που κληρονομούνται, αλλά δεν είναι ορατές από έξω από την κλάση. Αυτές οι μέθοδοι ονομάζονται προστατευμένες (protected). Η JavaScript, δυστυχώς, δεν υποστηρίζει τέτοιες μεθόδους.

Γι' αυτό προτείνω να εισαγάγουμε μια συγκεκριμένη σύμβαση, που επιτρέπει τη δημιουργία τέτοιων μεθόδων. Θα αρχίζουμε τα ονόματα αυτών των μεθόδων με υπογράμμιση. Ουσιαστικά χρησιμοποιούμε την παλιά ευρέως αποδεκτή σύμβαση για τις ιδιωτικές μεθόδους. Μόνο που ονομάζουμε αυτές τις μεθόδους προστατευμένες ως ένδειξη ότι κληρονομούνται, αλλά δεν θα τις χρησιμοποιούμε από έξω. Παρεμπιπτόντως, έτσι ακριβώς χρησιμοποιούνται σύμφωνα με την αρχαία σύμβαση.

Λοιπόν, ας γράψουμε μια γονική κλάση με μια προστατευμένη μέθοδο:

javascriptclass User {
  setName(name) {
    this.name = name;
  }
  getName() {
    return this._capeFirst(this.name);
  }
  
  _capeFirst(str) {
    return str[0].toUpperCase() + str.slice(1);
  }
}

Ας χρησιμοποιήσουμε αυτήν την προστατευμένη μέθοδο στην παιδική κλάση:

javascriptclass Student extends User {
  setSurn(surn) {
    this.surn = surn;
  }
  getSurn() {
    return this._capeFirst(this.surn);
  }
}
Задание 1

Στον ακόλουθο κώδικα, κάντε την βοηθητική μέθοδο προστατευμένη:

javascriptclass User {
  setName(name) {
    if (this._notEmpty(name)) {
      this.name = name;
    }
  }
  getName() {
    return this.name;
  }
  
  _notEmpty(str) {
    return str.length > 0;
  }
}
class Employee extends User {
  setSurn(surn) {
    if (this._notEmpty(surn)) {
      this.surn = surn;
    }
  }
  getSurn() {
    return this.surn;
  }
}