JavaScriptの継承は、プロトタイプチェーンを介して行われます。各オブジェクトにはプロトタイプとして別のオブジェクトがあり、オブジェクトはこのプロトタイプからプロパティを継承します。各オブジェクトについて、プロトタイプオブジェクトにアクセスするには3つの方法があります。
1 .__ proto__。オブジェクトのプロトタイプオブジェクトは、__Proto__属性を介してアクセスできます。このプロパティは、Firefox、Safari、およびChromeでのみサポートされており、IEやOperaではそうではありません。
2.Object.getPrototypeof()。オブジェクトをパラメーターとしてobject.getPrototypeof()メソッドに渡すことができ、実行後、オブジェクトのプロトタイプオブジェクトを返します。この方法は、ECMAScript 5標準でのみサポートされています。
3.O.Constructor.Prototype。最初にオブジェクトのコンストラクター関数を取得し、コンストラクター関数のプロトタイププロパティにアクセスしてプロトタイプオブジェクトにアクセスします。この方法を使用するための前提条件は、オブジェクト内のコンストラクターを指すコンストラクター属性があることです。
2つのオブジェクト間にプロトタイプチェーンの関係があるかどうかを判断するには、ISPrototype()メソッドを使用できます。
コードコピーは次のとおりです。
var p = {x:1};
var o = object.create(p);
console.log(p.isprototypeof(o)); // true
リテラルで作成されたすべてのオブジェクトについて、プロトタイプオブジェクトはObject.prototype(特別なオブジェクトとして、Object.prototypeにはプロトタイプオブジェクトがありません):
コードコピーは次のとおりです。
var x = {a:18、b:28};
console.log(x .__ proto __); // object {}
新しいオペレーターで作成されたすべてのオブジェクトについて、それらのプロトタイプオブジェクトは、コンストラクター関数のプロトタイププロパティです。
コードコピーは次のとおりです。
var x = {a:18、b:28};
関数テスト(c){
this.c = c;
}
test.prototype = x;
var t = new Test(38);
console.log(t); // object {c = 38、a = 18、b = 28}
console.log(t .__ proto __); // object {a = 18、b = 28}
console.log(t .__ proto __.__ proto __); // object {}
JavaScriptにオブジェクトを作成して新しい演算子を使用するプロセスは次のとおりです。
1.新しい空のオブジェクトを作成します。
2。このオブジェクトの__Proto__属性を、コンストラクター関数のプロトタイプ属性にポイントします。
3.このオブジェクトをこのパラメーターとして使用し、コンストラクター関数を実行します。
上記の作成プロセスから、同じコンストラクター関数から構築されたすべてのオブジェクトが__Proto__属性(つまり、そのプロトタイプオブジェクト)を等しくしているという結論を描画できます。つまり、プロトタイプオブジェクトは1つだけです。
コードコピーは次のとおりです。
var t = new Test(38);
var t2 =新しいテスト(68);
console.log(t === t2); // false
console.log(t .__ proto__ === t2 .__ proto __); // true