自作コンパイラの部屋
> オブジェクト指向プログラム言語としてのJavaScript
> 15.prototypeプロパティ
15.prototypeプロパティ
前節では、オブジェクトのプロパティに関数オブジェクトを代入することにより、メソッドの定義をしました。この方法だと、同一クラスのオブジェクト(インスタンス)ごとに異なるメソッドを持つことができ、柔軟であるという特徴がありますが、メモリの効率がやや悪いという不効率があります。一般的なオブジェクト指向言語のように、クラス側でまとめて、メソッドのテーブルを持つことはできないでしょうか?
これを実現するために、JavaScriptでは、prototypeプロパティというものが用意されています。
JavaScript言語では、オブジェクトのプロパティを探索する際に、まずオブジェクトが直接持っているプロパティから、該当のプロパティを探索します。そこになかった場合、オブジェクトのクラス(JavaScriptの場合、厳密にはコンストラクタ)のprototypeプロパティの中から、該当する名前のプロパティを探します。
以下のメソッド呼び出しの場合を考える
var foo = new Abc();
foo.xyz();
1.まず foo.xyz というプロパティを探す
2.なければ、Abc.prototype.xyz というプロパティを探す
この仕組みを利用して、メソッドを効率的に定義することができます。
16.prototypeによるメソッド定義