はじめに
プロトタイプチェーンの位置関係を調べて位置関係図を作りました。
プロトタイプチェーンの位置関係図
プロトタイプチェーンの位置関係を調べて作った図がこちらです。
黒い実線の上向きの矢印がプロトタイプチェーンの方向です。Object.getPrototypeOf(X)
もしくは X.__proto__
の先が示す方向です。
中央下のString
と function() {}
と Number
は関数です。
図を作って思ったのですが、 typeof Function.prototype
が object
にならないのは仕様ミスではないでしょうか。
newとconstructorを加えた図
さらに new
演算子と constructor
プロパティを調べて作った位置関係図がこちらです。
T.prototype.constructor
は T
です。
T.prototype.constructor.constructor
は Function
です。
Object.getPrototypeOf(Function)
は Function.prototype
です。
この図を見ながら MDN の オブジェクトのプロトタイプ にある Object.create
や Object.assign
でオブジェクトのプロトタイプを設定する例を読むと、効果的に学習できると思います。
さいごに
プロトタイプチェーンの位置関係図を示しました。
JavaScript では関数やプロパティをプロトタイプチェーンを辿って探します。 "abc".func()
において、関数 func
が "abc"
上に存在しなくても、プロトタイプチェーン上に func
が存在すれば、その関数が実行されます。
なので、プロトタイプチェーンの位置関係がどうなっているかは、JavaScript を理解する上で重要な知識です。
しかし、プロトタイプチェーン上に関数やプロパティを設定することは プロトタイプ汚染 と呼ばれ、推奨されておりません。初級者がこの知識を使う機会はほとんどないと思います。ですが知っておいても損はないと思います。
この位置関係図で JavaScript の理解が深まれば幸いです。