P121 Chapter13 プロトタイプオブジェクト

【13.1 Objectはすべての元】
殆ど全てのオブジェクト(※1)は、Object.prototypeプロパティに定義されたprototypeオブジェクトを継承している。prototypeオブジェクトとは、すべてのオブジェクトの作成時に自動的に追加される特殊なオブジェクトである。prototypeオブジェクトが保持しているメソッドは、例えばhasOwnProperty, toString, valueOfなどである。prototypeオブジェクトに組み込まれているメソッドはプロトタイプメソッドと呼ぶ。

※1 Object.create(null);やnew Map();などはObject.prototypeを継承しないオブジェクトが生成される。

【13.2 プロトタイプメソッドとインスタンスメソッドの優先順位】
インスタンスとプロトタイプオブジェクトで同じ名前のメソッドがある場合には、インスタンスのメソッドが優先解決される。

【13.3 in演算子とObject#hasOwnProperyメソッドの違い】
hasOwnProperyメソッドは、そのオブジェクト自身が指定したプロパティを持っているかを判定する。
in演算子はオブジェクト自身が持っているかを判定し、持っていない場合はprototypeオブジェクトまで探索して持っているかを判定する。