今回は、JavaScriptのクラスについて詳しく解説します。
classはES2015に導入された新しい書き方です。PHPやJavaなど、他の言語を学んだことがある方は、なんとなく直感的に理解できるはずです。
class を使用することで、より分かりやすくオブジェクトを生成できるようになりました。
クラスの基本
まずは基本的なクラスの書き方について押さえておきましょう。
class Member {
// コンストラクタ
constructor(name) {
// プロパティを定義
this.name = name;
}
// メソッド
getName() {
return this.name;
}
}
let member = new Member('tanaka');
console.log(member.getName())
コンストラクタ
コンストラクタは、クラスをnewしてインスタンスを生成した時に、一番最初に実行されます。コンストラタへの引数は、
let member = new Member('tanaka');
newした時に、( ) で渡すことができます。
このサンプルソースでは、nameというプロパティに引数で渡ってきた値をセットしています。
このクラス内のthisは、インスタンス自身を指します。
this.name と書くと、このインスタンスのnameプロパティになります。
メソッド
// メソッド
getName() {
return this.getName;
}
このようにfunctionキーワードなしにメソッドを宣言することができます。
メソッドは全てpublic になり、private はありません。
プロパティを定義
class Member {
name = ''
constructor(name) {
this.name = name;
}
このようにプロパティをあらかじめ宣言することもできます。
プロパティをプライベートに
何もつけずに宣言したプロパティは、すべてpublicになります。
プライベートにするには、プロパティ名に#をつけます。
class Member {
#name = ''
constructor(name) {
this.#name = name;
}
プライベートにアクセスできないことを確認
class Member {
name = ''
#age = 0
// コンストラクタ
constructor(name, age) {
// プロパティを定義
this.name = name;
this.#age = name;
}
// メソッド
getName() {
return this.name;
}
}
let member = new Member('tanaka', 20);
console.log(member.name) // tanaka
console.log(member.age) // undefined
publicなname は出力されて、privateなageはundefinedになることを確認できます。
静的な static
プロパティ、メソッドにstaticをつけることで、インスタンス化せずにアクセスすることができます。
class Member {
static name = 'suzuki'
}
console.log(Member.name)
継承
クラスの継承はextends を使用します。
class BaseMember {
}
class Member extends BaseMember {
}
親のメソッドを呼ぶ super
親のメソッドを呼ぶには、superを使用します。
class BaseMember {
constructor(name) {
this.name = name;
}
}
class Member extends BaseMember {
constructor(name, age) {
super(name)
this.age = age;
}
show() {
console.log(this.name, this.age)
}
}
let member = new Member('tanaka', 20);
member.show()
このサンプルコードでは、Memberクラスのコンストラクタ内で、親のコンストラクタにsuperを使用してnameを渡しています。
親のプロパティにアクセスするときは、
show() {
console.log(this.name, this.age)
}
このようにthisでアクセスすることができます。



