JavaScriptのOOPにおける保護されたメソッド
プライベートメソッドは継承されず、クラスの外部からは見えません。 しかし時には、継承されるがクラスの外部からは見えないメソッドが必要な場合があります。 そのようなメソッドは保護された(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;
}
}