【オブジェクト指向っぽく無く理解する】 プロトタイプチェーン
はじめに
見方を変えれば理解度も違うと思っての一言アドバイスです。わたしなりにこう解釈したらピンと来た!という事を述べていくシリーズです。
結論:プロトタイプオブジェクトの継承はアドレス参照
いきなり結論です。【前提知識】プロトタイプベースのオブジェクト指向の基礎知識 に目を通して頂いていれば、この一言で納得して貰えるかなぁ、と期待申し上げます。
MS Docs から引用すると『プロトタイプ プロパティおよびメソッドは、同じクラスの各オブジェクトに参照渡しでコピーされるため、すべて同じ値を持つことになります。』とハッキリ言い切られてました。
まぁ、これで終わってはさすがに乱暴に過ぎると思うので、以下振る舞いからこう考えるとしっくりくるかな、という考察です。文章がうるさくなるので引用箇所は明示しません。あしからず。
プロトタイプオブジェクト指向の利点1:『必要なメモリ量を節約できる』ということは
『プロトタイプ・オブジェクトの内容はそれぞれのインスタンスから暗黙的に参照される』と説明されました。
呼び出すインスタンスに存在しないメソッドを別のインスタンスから呼び出して使うのが プロトタイプベースのオブジェクト指向に於ける継承ですが、メモリ節約という目的が有るということは、コンパイラのリンケージでモジュール結合する様にincludeしている訳では無いでしょう。
共用で使えるメソッドはどれか元となるインスタンス(実際には違うのでイメージとして)に一回だけ生成しておいて、他のインスタンスはそれを(暗黙的に)参照している。そしてある特定のインスタンスにおいては、その共用メソッドに個別機能を持たせる為にそのインスタンス内にメソッドを持たせて参照先を上書きしている、って考えてみるとどうでしょうか?
プロトタイプオブジェクト指向の利点2:インスタンス生成後に追加したメンバも継承される
さらに気になる引用。『インスタンスを生成した「後」に、基となるプロトタイプ・オブジェクトにメンバを追加した場合にも、これを認識できる』
なんとなく納得出来ないでしょうかね?
この記事が気に入ったらサポートをしてみませんか?