ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript_javascript スキルでのプロトタイプ チェーン プロトタイプの紹介

JavaScript_javascript スキルでのプロトタイプ チェーン プロトタイプの紹介

WBOY
WBOYオリジナル
2016-05-16 16:23:041477ブラウズ

JavaScript での継承は、プロトタイプ チェーンを通じて行われます。各オブジェクトの内部にはプロトタイプとして別のオブジェクトがあり、オブジェクトはこのプロトタイプからプロパティを継承します。各オブジェクトについて、次の 3 つの方法でそのプロトタイプ オブジェクトにアクセスできます:

1.__プロト__。オブジェクトのプロトタイプ オブジェクトには、その __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__);//オブジェクト {}


new 演算子で作成されたすべてのオブジェクトのプロトタイプ オブジェクトは、コンストラクター関数のプロトタイプ属性です:


コードをコピー コードは次のとおりです:

var x = {a:18, b:28};
関数テスト(c){
this.c = c;
}
Test.prototype = x;
var t = 新しいテスト(38);
console.log(t);//オブジェクト {c=38, a=18, b=28}
console.log(t.__proto__);//オブジェクト {a=18, b=28}
console.log(t.__proto__.__proto__);//オブジェクト {}


new 演算子を使用して JavaScript でオブジェクトを作成するプロセスは次のとおりです:

1. 新しい空のオブジェクトを作成します。
2. このオブジェクトの __proto__ 属性をコンストラクター関数のプロトタイプ属性にポイントします。
3. このオブジェクトをパラメータとして使用して、コンストラクター関数を実行します。

上記の作成プロセスから、同じコンストラクター関数から構築されたすべてのオブジェクトの __proto__ 属性 (つまり、プロトタイプ オブジェクト) は等しい、つまり、プロトタイプ オブジェクトは 1 つだけであると結論付けることができます。


コードをコピー コードは次のとおりです:

var t = 新しいテスト(38);
var t2 = 新しいテスト(68);
console.log(t === t2);//false
console.log(t.__proto__ === t2.__proto__);//true

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。