はい!🙌🏼プロトタイプチェーンにはいくつかのステップがあります。Dog.prototype自体はオブジェクトであるため、組み込みのObject.prototypeからプロパティを継承します。})を使用していますが、これはまだ有効なJavaScriptです。ES6ではコンストラクタ関数のより簡単な構文が導入され、プロトタイプを操作できます!classは、コンストラクタ関数の糖衣構文(読み書きのしやすさのために導入された書き方)です。機能は同じです!classキーワードを使用してクラスを記述します。classにはconstructor関数があり、これは基本的にはES5で記述したコンストラクタ関数と同じ機能です。プロトタイプに追加するプロパティは、classで定義します。ES6はclassを導入しました。これはコンストラクタ関数の糖衣構文です。classのもう1つの素晴らしい点は、他のclassを簡単に拡張できることです。同じ品種の犬、チワワを何匹か見せたいとします。チワワは(どういうわけか...😐)まだ犬です。colorの代わりに、nameプロパティだけをDogクラスに渡します。このチワワは特別なこともできます。チワワは小さな鳴き声を持っています。拡張したclassでは、superキーワードを使用して親のclassのコンストラクタにアクセスできます。親classのコンストラクタが必要とする引数、この場合はsuper:nameに渡す必要があります。拡張したclassmyPetは、Chihuahua.prototypeとDog.prototypeの両方にアクセスできます(Dog.prototypeはオブジェクトなので、Object.prototypeに自動的にアクセスします)。プロトタイプ継承は、ES5コンストラクタと同じようにclassで機能します。superキーワードを使用すると、サブクラスが拡張するクラスを呼び出すことができます。Chihuahua.prototypeにはsmallBark関数があり、Dog.prototypeにはbark関数があるため、myPetでsmallBarkとbarkの両方にアクセスできます!あなたの想像通り、プロトタイプチェーンは永遠に続くわけではありません。最終的に、プロトタイプがnullに等しいオブジェクト、この場合はObject.prototypeオブジェクトです。ローカルまたはプロトタイプチェーンで見つからないプロパティにアクセスしようとすると、undefinedが返されます。拡張classから継承されたメソッドを呼び出すことができます。プロトタイプチェーンは__proto__の値がnullの場合に終了します。この記事では、コンストラクタ関数とclassを使って説明しましたが、オブジェクトにプロトタイプを追加する別の方法は、object.createメソッドを使用することです。このメソッドでは新しいオブジェクトを作成し、そのオブジェクトのプロトタイプを正確に指定できます💪🏼そのためには、既存のオブジェクトを引数としてObject.createメソッドに渡します。このオブジェクトが、作成するオブジェクトのプロトタイプです!既存のオブジェクトを引数としてObject.createに渡す作成したmeオブジェクトをログに記録してみます。meオブジェクトのログmeオブジェクトにプロパティを追加したわけではありません。列挙できない__proto__プロパティが含まれているだけです。__proto__プロパティは、プロトタイプとして定義したオブジェクトへの参照が保持されています。nameとageプロパティを持つpersonオブジェクトへの参照があります。personオブジェクトはオブジェクトなので、personオブジェクトの__proto__プロパティの値はObject.prototypeです(読みやすくするために、GIFアニメではこのプロパティを展開しませんでした)。これでJavaScriptの素晴らしい世界で、プロトタイプ継承が重要な機能である理由を理解できたと思います。