私の理解のためにとてもざっくりとプロトタイプパターンについてまとめました。
プロトタイプ
プロトタイプとは、javascriptのオブジェクトが内部的に参照している親オブジェクトのこと。
プロトタイプパターンとは
複数の同じ型のオブジェクトの間でプロパティを共有するために、既存のオブジェクト(プロトタイプ)を元にして、新しいオブジェクトをコピーすることで生成する設計パターン。
コード例
const person = {
greet() {
console.log(`Hello, I'm ${this.name}`);
}
};
const user = Object.create(person);
user.name = "popfly";
user.greet(); // Hello, I'm popfly
userは、personをコピーしているのではなく、親として参照しています。
仕組み
javascriptでは、オブジェクトがプロパティを探す時、
- 自分の中を探す
- 自分の中にない時はプロトタイプを見る
- その中にもない時は、さらにそのプロトタイプを見る
という構造になっており、これを プロトチェーン と呼ぶ。
プロトタイプ(prototype)プロパティとは?
関数オブジェクトだけが最初から持っているプロパティ。
その関数から生まれるインスタンスに共有させるデータ置き場のような役割。
→子インスタンスが、自分にない機能を親に借り行くための、親が持っている共有倉庫ですね。
メリット
- メモリの節約
2. コード再利用
__proto__について
javascriptのオブジェクトが内部に持っている隠しプロパティ。
自分が持っていない機能(メソッドやプロパティ)を借りるために、親の prototype を指し示している参照。