Javascript におけるオブジェクトの考え方

多分間違ってるけどこんな感じなのかな。

  • 全てのオブジェクトには prototype が存在する。
  • インスタンス
    • プロパティの一覧
    • 自分の元のオブジェクトへの参照
    を持っている。
  • あるオブジェクトのインスタンスのプロパティは
    • 自分自身のプロパティ
    • 自分の元のオブジェクトの prototype が持っているプロパティ
    の2種類がある。
  • インスタンスのプロパティを参照するときは、自分自身のプロパティを優先に検索する。
  • インスタンスのプロパティを参照するときに、元のオブジェクト自身のプロパティは検索されない。
  • prototype もオブジェクトのインスタンス
  • よって prototype のプロパティを参照するときもオブジェクトのプロパティを参照するときと同じルールが適用される。
  • だから、prototype そのものには、インスタンスであれば何でも入れることができる。
  • これによって上へ上へとプロパティの検索が走る。
  • オブジェクトは Function のインスタンス
  • だからオブジェクトのプロパティの検索は
    • オブジェクト自身のプロパティ
    • Function の prototype が持っているプロパティ
    に対して行なわれる。
  • オブジェクトのプロパティの検索にはオブジェクトの prototype は使用されない。

lisp で実装できるような気がしてきた。