JavaScript では、システム組み込み関数とユーザー定義関数の両方を含む、任意の正当な関数をオブジェクトのコンストラクターとして使用できます。関数がコンストラクターとして実行されると、その内部の this 属性は関数自体を参照します。
一般に、コンストラクターには戻り値がなく、this ポインターによって渡されたオブジェクトを初期化するだけで、何も返しません。関数が値を返す場合、返されたオブジェクトは新しい式の値になります。形式的な観点から見ると、関数がコンストラクターとして実行されるか、通常の関数として実行されるかの唯一の違いは、new 演算子が使用されるかどうかです。
上記の説明は実際にはより正確な意味を持ち、関数が値を返す状況を 2 つの状況に分けます。関数の戻り値は参照型と値型です。
関数の戻り値が参照型 (配列、オブジェクト、または関数) のデータである場合、new 演算子をコンストラクターとして使用してこの関数が構築されると、演算の結果は次のように置き換えられます。このとき、コンストラクター本体の this 値は失われ、返されたオブジェクトに置き換えられます。例: