コンストラクタ関数は別のオブジェクトを返り値として返すことも可能で、その場合は返されたオブジェクトがnew式の値となる。thisの値であったオブジェクトは破棄される。
new演算子によって生成されたオブジェクトのプロトタイプは、コンストラクタ関数のprototypeプロパティの値になる。
プロパティの値を読み出す場合、オブジェクト自身からプロパティを探し、見つからない場合にはプロトタイプオブジェクトをたどって探す。プロパティの値を書き込む場合はプロトタイプオブジェクトは使用されない。
組み込みクラスのプロトタイプオブジェクトにも値を代入でき、これによって組み込みクラスそのものを拡張することができる。
コンストラクタ関数のプロトタイプオブジェクトにプロパティを追加すると、そのコンストラクタ関数で初期化された全てのオブジェクト(インスタンス)でそのプロパティが使えるようになります。これは、インスタンスのスコープにプロパティが見つからない場合、プロトタイプオブジェクトをたどって、コンストラクタ関数のprototypeプロパティが参照されるためです(プロトタイプチェーン)。これによって、オブジェクト指向プログラミングにおける継承を実現することできます。
「プロトタイプ(オブジェクト)」が「prototype(オブジェクト)」と異なることは、次のようなコードを試してみるとわかります。