JavaScriptにはそもそも「クラス」という概念はないけど、prototypeを使用して同じようなことができる。
この章で学ぶべきことは
-
- new演算子で関数を呼ぶとオブジェクトが作成されること
- そういう関数をコンストラクタと呼ぶこと
- new演算子でオブジェクトを作成するプロセスは
- 空オブジェクトを作成し、
- 関数のprototypeプロパティのオブジェクトの各プロパティを空オブジェクトに設定し(※注1)、
- thisにそのオブジェクトを格納し、
- コンストラクタ関数内のコードを実行し、
- そのオブジェクトを返す
- コンストラクタ関数が値をreturnした場合は、作成されたオブジェクトは破棄。
- 注1で、prototypeオブジェクトの各プロパティが設定されると書いたが、実はそうではなく、そのように見せかけるだけ。生成されたオブジェクト自身にはプロパティは設定されず、そのプロパティを呼び出された時、prototypeのプロパティを呼び出すというだけ。つまり、オブジェクトoのプロパティpが参照された場合、もしそのオブジェクトoにプロパティpが存在していなかった場合、そのオブジェクトoを作成したコンストラクタ関数のprototpypeオブジェクトのpプロパティを参照する。
- 上記アーキテクチャをJavaScriptの「継承」という。