prototype
全てのオブジェクトが既存のオブジェクトのクローンとなる
クラスからオブジェクトが生成されることはない
OOPのようにクラスからインスタンスを生成するのではなく、全てがオブジェクトである
ただしプリミティブ型を除く
そのオブジェクトの親オブジェクトをプロトタイプという概念で保持
そのオブジェクトにメッセージが来て、自分がプロパティやメソッドを持っていなかった場合は、親オブジェクトにそのメッセージを転送する
その親も持ってなかったら、その親の親へ、、、
nullに到達するまで遡る
JavaScriptの話
全てのオブジェクトはObjectのインスタンス
Objectはプロトタイプチェーンのトップに当たる
https://qiita.com/Maki-Daisuke/items/c10466ab9a5e826cf10e
JSの継承
https://dev.to/lydiahallie/javascript-visualized-prototypal-inheritance-47co
https://qiita.com/uhyo/items/b63ac11e8ec54d2c3a2b
こんなイメージ
code:js
var c = new Object;
var p = new Object;
// cにメッセージ応答を定義
c.hoge = "hoge";
// pにプロトタイプをセット
p.__proto__ = c;
// メッセージ送信
console.log(c.hoge); // "hoge"
console.log(p.hoge); // "hoge" // p.__proto__.hogeに転送
言語例
Io
JavaScript
Lua
Self
プロトタイプベースなOOPの言語の例
Self
NewtonScript
参考
JavaScriptに代表されるプロトタイプ言語には(本来)クラス→インスタンスという概念は無い - Qiita
https://coliss.com/articles/build-websites/operation/javascript/javascript-visualized-prototypal-inheritance.html
https://zenn.dev/morinokami/books/learning-patterns-1/viewer/prototype-pattern