JavaScript 第6版 O'REILLY Japan そのいち


「理解の仕方が理解できる人だけが理解できる」のと「何が理解できないのかが理解できる人だけが理解できる」をくっつけると「何が理解できていないのかを理解する仕方を知らない人はいつまでたっても理解できない」となる。がぁぁぁ。いやさ、まあ、躓いてあらためて基礎あたりを読み返しているとだな、理解していたつもりのことがあちこちから出現して、さて、どう言うことだっけ…と混乱し始める訳で。と言うことで、そんなこんなの「理解」となったのさ。

David Flanagan 著 JavaScript 第6版 O'REILLY Japan 2013年1月31日 初版第2刷発効 144ページ 6.8.1 プロトタイプ属性

ECMAScript5ではObject.getPrototypeOf()に引数としてオブジェクトを渡すことで、そのオブジェクトのプロトタイプを取得できます。ECMAScript3には同等の関数はありません。しかし、一般的には、o.constructor.prototypeという式を使ってオブジェクトoのプロパティを判定できます。new式を使って生成されたオブジェクトは、一般的には、オブジェクトを生成するときに使ったコンストラクタ関数を参照するconstructorプロパティを継承します。また、前述したように、コンストラクタ関数はprototypeプロパティを持ち、このプロパティがコンストラクタを使って生成されたオブジェクトのプロトタイプを参照します。詳しくは9.2節で説明します。この項では、オブジェクトのプロトタイプを判定する方法としては、先程の方法が完全ではない理由についても説明します。オブジェクトリテラルや、Object.create()で生成されたオブジェクトの場合、constructorプロパティがObject()コンストラクタを参照することに注意してください。従って、constructor.prototypeは、オブジェクトリテラルの場合は正しいプロトタイプを参照していることになります。一方で、Object.create()を使って生成されたオブジェクトの場合は正しくないことになります。

いや、最後の「従って…」以降でひっかかった。var o = {}; と p = Object.create(o) の constructor.prototype が違うっちゅうの? ほれ、何が理解できていないか理解できてないじゃないか。


Mail Address:h_sasaki@nifty.com

© 2013 佐々木仁志