メインコンテンツまでスキップ

クラスとオブジェクト指向

備考

この記事では、まだ 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メソッド内で得られるthispochiそのものです。この仕組みにより、クラス定義は、全てのインスタンスで共通する動作を問題なく抽象化できます。

なお、これ以降、クラスのメソッドは#記号を用いて表すこととします。例えば、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メソッドを実行させ、正常に動作することを確認してください。