Προστατευμένες Μέθοδοι στην Αντικειμενοστραφή Προγραμματισμό σε JavaScript
Οι ιδιωτικές μέθοδοι δεν κληρονομούνται ούτε είναι ορατές από έξω από την κλάση. Μερικές φορές, ωστόσο, χρειαζόμαστε μεθόδους, που κληρονομούνται, αλλά δεν είναι ορατές από έξω από την κλάση. Αυτές οι μέθοδοι ονομάζονται προστατευμένες (protected). Η JavaScript, δυστυχώς, δεν υποστηρίζει τέτοιες μεθόδους.
Γι' αυτό προτείνω να εισαγάγουμε μια συγκεκριμένη σύμβαση, που επιτρέπει τη δημιουργία τέτοιων μεθόδων. Θα αρχίζουμε τα ονόματα αυτών των μεθόδων με υπογράμμιση. Ουσιαστικά χρησιμοποιούμε την παλιά ευρέως αποδεκτή σύμβαση για τις ιδιωτικές μεθόδους. Μόνο που ονομάζουμε αυτές τις μεθόδους προστατευμένες ως ένδειξη ότι κληρονομούνται, αλλά δεν θα τις χρησιμοποιούμε από έξω. Παρεμπιπτόντως, έτσι ακριβώς χρησιμοποιούνται σύμφωνα με την αρχαία σύμβαση.
Λοιπόν, ας γράψουμε μια γονική κλάση με μια προστατευμένη μέθοδο:
class User {
setName(name) {
this.name = name;
}
getName() {
return this._capeFirst(this.name);
}
_capeFirst(str) {
return str[0].toUpperCase() + str.slice(1);
}
}
Ας χρησιμοποιήσουμε αυτήν την προστατευμένη μέθοδο στην παιδική κλάση:
class Student extends User {
setSurn(surn) {
this.surn = surn;
}
getSurn() {
return this._capeFirst(this.surn);
}
}
Στον ακόλουθο κώδικα, κάντε την βοηθητική μέθοδο προστατευμένη:
class 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;
}
}