Function と Object はどちらも関数のインスタンスです。
Function の親プロトタイプは Function のプロトタイプを指し、Function のプロトタイプの親プロトタイプは Object のプロトタイプです。
Object の親プロトタイプは Function のプロトタイプも指します。
デフォルトの親プロトタイプがコンストラクターの明示的プロトタイプであるインスタンス オブジェクト
[各オブジェクトには、その親オブジェクト (構築されたオブジェクト関数) プロトタイプ (ここでは親プロトタイプまたは暗黙的プロトタイプと呼ばれます) を指す暗黙的なプロパティがあります。 。プロトタイプもオブジェクトであるため、プロトタイプには親プロトタイプもあります。オブジェクトのプロトタイプはすべての親プロトタイプの最上位 (プロトタイプ ルート) であり、いわゆるプロトタイプ チェーンを形成します。]
オブジェクト属性アクセス。原則
オブジェクトから属性を読み取るとき、そのような属性がオブジェクト自体の属性リストに存在しない場合、関連付けられた親プロトタイプ オブジェクト内でその属性が検索されます。リストにそのような属性がない場合、この親プロトタイプの親プロトタイプは、それが見つかるまで、または最上位プロトタイプ [Object.prototype] オブジェクト属性リストの検索が完了するまで検索されます。
を呼び出すメソッドメソッドの関数オブジェクトはオブジェクトの属性値であるため、オブジェクトは属性にアクセスするための検索プロセスと同じです。
例:
Object.prototype。 m1 = function (){
alert("私はライオンです");
function Class1(str){
this.p1 = str;
}
function Class2 (){}
Class2.prototype.m1 = function(){
alert("Hello");
}
var n1 ("Feathered Lion"); /@__proto_ _Attribute は親プロトタイプへの参照です
//@Object.prototype.__proto__=null
/*
n1 のプロトタイプ チェーン
n1.__proto__=Class1.prototype
Class1。プロトタイプ .__proto__=Object.prototype
*/
var n2 = new Class2()
/*
n2 のプロトタイプ チェーン
n2.__proto__=Class2.prototype
Class2.prototype.__proto__=Object.prototype
*/
n1.m1();//===Object.prototype.m1();
n2.m1();//=== Class2.prototype.m1();
alert(n1.p1);//毛むくじゃらのライオン
alert(n2.p1);//未定義