クラスとオブジェクト指向
この記事では、まだ JavaScript の標準仕様には含まれていないパブリックフィールド宣言を使用しています。Chrome と Firefox では動作しますが、Safari では動作しないかもしれません。
多くのプログラミング言語が、オブジェクト指向という考え方を持っています。オブジェクト指向とは、「データと動作を一つのまとまりとして捉える考え方」です。
オブジェクト指向におけるこのまとまりを、クラスと呼びます。クラスに含まれるデータがフィールド、動作がメソッドです。
クラスを使うためには、定義をしなければなりません。クラスの定義とは、そのクラスがどのようなフィールドやメソッドを持つかを示す、設計図のようなものです。
class Dog {
age;
name;
bark() {
if (this.age > 5) {
console.log("バウバウ");
} else {
console.log("ワンワン");
}
}
}
JavaScript においてクラスを定義するためには、class
構文を用います。上の例で示したDog
クラスの定義は、現実世界の犬を表す設計図です。犬を表すためのデータには、例えば「年齢」や「名前」があります。これがage
フィールドやname
フィールドです。
犬に関わる動作には、例えば「吠える」などがあります。bark
メソッドとしてみましょう。メソッドの中のthis
キーワードは、設計図から生まれた実体を表します。
const pochi = new Dog();
pochi.name = "ポチ";
pochi.age = 8;
pochi.bark();
Dog
の定義から実体(インスタンス)を作り出すためには、new
キーワードを用います。インスタンスは通常の JavaScript オブジェクトと同様の形式なので、ドット記法またはブラケット記法によりフィールドやメソッドにアクセスできます。
pochi.bark();
を実行した際、bark
メソッド内で得られるthis
はpochi
そのものです。この仕組みにより、クラス定義は、全てのインスタンスで共通する動作を問題なく抽象化できます。
なお、これ以降、クラスのメソッドは#
記号を用いて表すこととします。例えば、Dog
クラスのbark
メソッドはDog#bark
メソッドと表記します。
コンストラクタ
コンストラクタは、new
演算子が使用された際に呼び出される関数です。JavaScript
では、constructor
という名前のメソッドを定義することで使用することができます。
class Dog {
age;
constructor(age) {
this.age = age;
}
}
const pochi = new Dog(8);
console.log(pochi.age); // 8
コンストラクタは、他の関数と同じように、引数を取ることができます。通常、コンストラクタに渡される値は、フィールドの初期化などに用いられます。
コンストラクタを使用する
JavaScript には、日時を表すためのDate
クラスが用意されています。Date
クラスのコンストラクタは、例えば文字列引数 1 つにより呼び出すことができ、その文字列を日付として解釈しようと試みます。Date
クラスには、日時を扱うための様々な便利メソッドが用意されています。
const valentinesDay = new Date("2020-02-14 00:00:00");
console.log(valentinesDay.getDate()); // 14
例えば、Date#getDate
メソッドは、その日の日付を返すメソッドです。
課題
Dog
クラスに、私の名前は〜です。
(〜の部分にname
プロパティを埋め込む)とコンソールに出力するintroduceSelf
メソッドを追加してください。実際にintroduceSelf
メソッドを実行させ、正常に動作することを確認してください。