本「JavaScript the definitive guide 5 edition」のセクション 9.2 プロトタイプと継承で、次の言葉を見つけました。
前のセクションでは、new 演算子が新しい空のオブジェクトを作成し、そのオブジェクトのメソッドとしてコンストラクター関数を呼び出すことを示しました。ただし、これは完全な話ではありません。空のオブジェクトを作成した後、 new はそのオブジェクトのプロトタイプを設定します。オブジェクトのプロトタイプは、そのコンストラクター関数のプロトタイプ プロパティの値です。すべての関数には、関数の定義時に自動的に作成および初期化されるプロトタイプ プロパティがあります。プロトタイプ プロパティの初期値は、単一のプロパティを持つオブジェクトです。このプロパティはコンストラクターと呼ばれ、プロトタイプが関連付けられているコンストラクター関数を参照します。(第 7 章のコンストラクター プロパティを思い出すかもしれません。これが、すべてのオブジェクトにコンストラクター プロパティがある理由です。) このプロトタイプ オブジェクトに追加するプロパティは、コンストラクターによって初期化されたオブジェクトのプロパティのように見えます。
では、それが本当なら、どのようにしてプロトタイプの継承が存在するのでしょうか? つまり、コンストラクター関数のプロトタイプ オブジェクトが最初にコンストラクター プロパティを持っているとしましょう。プロトタイプ オブジェクト自体がオブジェクトであるため、そのコンストラクターを決定するために、 をよく使用しますprototype_object.constructor
。しかし、 にはprototype_object
すでにプロパティ自体があり、プロトタイプが関連付けられているコンストラクター関数をconstructor
指しています。この状況で、どのように継承が存在できるのでしょうか?