JavaScript プロトタイプチェーン
JavaScriptのプロトタイプチェーンとは、オブジェクトのプロパティを参照する際に、そのオブジェクトが持つプロパティが存在しない場合、そのオブジェクトのプロトタイプオブジェクト(親オブジェクト)を探索する仕組みのことを言います。
具体的には、オブジェクトのプロパティを参照する際に、まずそのオブジェクト自身が持つプロパティを探し、存在しない場合にそのオブジェクトのプロトタイプオブジェクトを探索します。もしプロトタイプオブジェクトにもそのプロパティが存在しない場合は、さらに上位のプロトタイプオブジェクトを探索し、それでも見つからない場合はundefinedを返します。
このプロトタイプチェーンは、JavaScriptのオブジェクト指向プログラミングの基礎となる機能であり、継承やポリモーフィズムなどの概念を実現するために使用されます。また、JavaScriptにおいては、すべてのオブジェクトはObjectオブジェクトを継承しているため、すべてのオブジェクトはObjectオブジェクトのプロパティを使用することができます。
プロトタイプチェーンは、オブジェクトを構築するときに理解する必要があります。また、オブジェクトを継承したり、カスタムオブジェクトを作成したりする場合にも重要な概念です。
JavaScriptにおいて、すべてのオブジェクトは自身のプロトタイプを持っています。プロトタイプは、他のオブジェクトのプロパティを継承するために使用されます。JavaScriptでは、プロトタイプチェーンと呼ばれる仕組みがあります。プロトタイプチェーンを使用すると、オブジェクトのプロパティを検索するために、そのオブジェクトのプロトタイプチェーンを辿ることができます。
例えば、以下のようなオブジェクトがあったとします。
let person = {name: "John"};
このオブジェクトには、name
というプロパティがあります。しかし、もし次のようにして、personオブジェクトのプロトタイプを変更した場合はどうでしょうか。
let person = {name: "John"};
let anotherPerson = {age: 25};
person.__proto__ = anotherPerson;
console.log(person.name);
console.log(anotherPerson.name);
console.log(person.age);
console.log(anotherPerson.age);
これにより、personオブジェクトは、anotherPersonオブジェクトのプロパティを継承します。つまり、personオブジェクトでname
プロパティを検索すると、最初にpersonオブジェクト自身にname
プロパティがあるかを検索し、存在しない場合にはpersonオブジェクトのプロトタイプチェーンを辿って、anotherPerson
オブジェクトのage
プロパティを検索します。このように、プロトタイプチェーンを辿ることで、オブジェクトの継承関係を表現することができます。