【JavaScript】プロトタイプについて【継承 プロトタイプチェーン】
この記事はJavaScriptの経験が浅い人が書いています。
間違っている点等ございましたら、ご指摘いただけると幸いです。
参考にした記事
【JavaScript】 プロトタイプとは?prototypeプロパティはプロトタイプではない件について
JavaScriptのプロトタイプからオブジェクト指向を学ぶ - Qiita
Object のプロトタイプ - ウェブ開発を学ぶ | MDN
プロトタイプはメモリの節約や継承機能を提供するものです。
例えば以下のようなコード
const str = new String('hello');
Stringオブジェクトをインスタンス化します。
strはStringオブジェクトなので、感覚的にStringオブジェクトで用意されているメソッドを使えることは分かります。
例えば以下のようなコード
console.log(str.charAt(2));
ここで開発者ツールを使ってstrの構造を見てみたいと思います。
するとcharAtメソッドが定義されていないことが分かります。ではなぜcharAtメソッドを使えることができるのか。
結論から書くと、prototypeの仕組みによって上記のようにメソッドを使うことができています。
例えば以下のコード
const a = new b;
aの[[Prototype]]にb.prototypeの参照を渡している
つまり上記に書いた
const str = new String('hello');
は
strの[[Prototype]]にString.prototypeの参照を渡しているということになります。
なので先ほど使ったメソッドのcharAtはString.prototypeオブジェクトのプロパティとして登録されているはずです。
証拠としてドキュメントには以下のように定義されています。
String.prototype.charAt