そのとき「どのオブジェクトの?」という情報を格納しているのが[[prototype]]だ。実際には「どのオブジェクトの?」を直接記しているのではなくて「参照すべきオブジェクトが記憶されているメモリ上の番地」が格納されているのだが。[[prototype]]は一見プロパティのように見えるが、JavaScriptの実装上では見ることも操作することもできない。疑似コードとして書くとこんな感じになる。Abc;console.log(xyz.[[prototype]];//Abc.prototype(が記憶されている○×○×○番地)[[prototype]]は概念的な内部プロパティなので上のコードを書いてももちろん動作しないが、これでイメージはなんとなく掴めたはず。[[prototype]]を具現化する__proto__プロパティそこで登場するのが__proto__プロパティだ。上記疑似コードの[[prototype]]を__proto__に置き換える。56}p=56というプロパティを持つオブジェクトを返した。これはAbc.prototypeにほかならない。__proto__は「[[prototype]]を実装上で参照・操作しうるオブジェクトとして取り扱えるようにしたプロパティ」ということになる。prototypeプロパティがさらにどのオブジェクトに遡るべきかはもちろんprototype.__proto__を見ればわかる。上のコードに二行足してみよう。{}console.log(Object.prototype.__proto__);//nullxyzのプロトタイプはAbc.prototypeで、Abc.prototypeのプロトタイプは空のオブジェクト、つまりObject.prototypeで、Object.prototypeのプロトタイプはnull。このようにxyzからObjectオブジェクトまで一連のチェーンで繋がり、チェーンのどのrototypeプロパティにないものはnullにももちろんないから、最終的にundefinedとなる。するとプロトタイプチェーンというものの見通しがかなり良くなったのではないだろうか。注意しなければならないのは__proto__プロパティは過去に非標準の仕様だったということ。ECMAScript5(ECMAScriptはJSのベースとなる仕様だ)までは各実装ごとに独自の仕様として用意されていた。環境によっては__proto__が使えなかったりする。tableこちらで確認できる。literals」や「Object.prototype.__proto__」の項目を見ると、デスクトップブラウザやモバイルではそこそこ対応が進んでいるものの、コンパイラ関係ではほぼほぼ全滅だったりする(2016年3月23日現在)。web界隈でフロントエンドとしては気にしなくてもいいけど、「まだ当たり前に使えるものとは限らない」というのは頭の片隅に置いておいた方がいいかもしれない。MDN__proto__の使用は、論争の的になり、推奨されていません。EcmaScript言語仕様にもともとは含まれていませんでした。最新のブラウザはとにかくそれを実装することを決定しました。プロパティはECMAScript第6版言語仕様で標準化されました。将来にサポートされます。それにもかかわらず、オブジェクトの[[Prototype]]を変化させることは、性能を気にしている場合避けるべき低速の操作です。34}[[prototype]]の振り先変えられたりできるけど速度とトレードオフになるので気を付けよう、ということも。チェーンの繋がりもよく解らなくなるしね。まとめ[[prototype]]はチェーンの繋がりを示すために、オブジェクト同士を紐付ける概念的内部プロパティ。__proto__プロパティはその[[prototype]]を実際に参照したり操作したりするために作られた実装上のプロパティ。全てのJavaScript実装(環境)で使えるとは限らない。[[prototype]]と__proto__はプロトタイプチェーンの仕組を理解するために知っておいて損はないけど、実際に使えるかどうかとか、また使えるとして使うべきかどうかは別問題ってこと。そんな感じで前回・今回でプロトタイプチェーン関係はかなり整理できた気がする。クラスベースの言語のように、ひな形(クラス)オブジェクトと実態(インスタンス)オブジェクトを強い拘束を持ちながら明瞭に区別するような言語とは全然違う、というのもなんとなく見えた。プロトタイプベース言語とクラスベース言語を比較してどっちが良い悪いなんて議論はナンセンスだし、一方に他方の概念を中途半端に持ち込むのは禁忌とすら思える。ひと段落したところで次に何書くかは決めてない。そもそも書くかどうかも決めてないけどね。気が向いたらスコープとかスコープチェーンとかクロージャのこと調べて書くかも。