ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript オブジェクト指向プログラミング 3 プロトタイプ パターン (前編)_js オブジェクト指向

JavaScript オブジェクト指向プログラミング 3 プロトタイプ パターン (前編)_js オブジェクト指向

WBOY
WBOYオリジナル
2016-05-16 17:58:01919ブラウズ

作成するすべての関数にはプロトタイプ プロパティがあります。これは、特定の型のすべてのインスタンスで共有できるプロパティとメソッドを含むオブジェクトです。これを使用する利点は、すべてのオブジェクト インスタンスがそれに含まれるプロパティとメソッドを共有できることです。つまり、コンストラクターでオブジェクトの情報を定義する必要がなく、この情報をプロトタイプ オブジェクトに直接追加できることです。次のように、最初の 2 つのブログの例を引き続き書き直します。

コードをコピーします コードは次のとおりです。 🎜>
function Employee() {
};
Employee.prototype.Age = 28; = "ソフトウェアエンジニア";
Employee.prototype.SayName = function () {
alert(this.Name)
}; SayName();//ジム
var emplayee2 = new Employee();
emplayee2.SayName(); //ジム
alert(employee1.SayName = emplayee2.SayName);//true


with コンストラクター パターンとの違いは、新しいオブジェクトのこれらのプロパティとメソッドがすべてのインスタンスで共有されることです。
上記はプロトタイプ モードの概要です。プロトタイプ モードの動作原理を理解するには、ECMASCRIPT のプロトタイプの性質を理解する必要があります。
プロトタイプについて
JavaScript では、新しい関数が作成されるたびに、特定のルールのセットに従ってその関数のプロトタイプ属性が作成されます。デフォルトでは、プロトタイプ属性がある場合でも、コンストラクター属性が自動的に取得されます。この属性には、プロトタイプ属性が配置されている関数へのポインターが含まれており、このコンストラクターを通じて他の属性やメソッドをプロトタイプに追加し続けることができます。 。
カスタム コンストラクターを作成した後、そのプロトタイプ プロパティはデフォルトでコンストラクター プロパティのみを取得し、他のメソッドは Object から継承されます。新しいインスタンスを作成するためにコンストラクターが呼び出されるとき、インスタンスにはコンストラクターのプロトタイプ プロパティを指すポインター (内部プロパティ) が含まれます。この接続は、インスタンスとコンストラクターの間ではなく、インスタンスとコンストラクターのプロトタイプ プロパティの間に存在することに注意してください。
一部の実装では、内部プロパティ (_proto_properties) にアクセスできませんが、すべての実装で、isPrototypeOf メソッドを通じてオブジェクト間にこのプロトタイプ関係が存在するかどうかを判断できます。基本的に、このメソッドは、オブジェクトの _proto_ 属性が isPrototypeOf を指している場合に true を返します。以下に示すように:




コードをコピー
コードは次のとおりです: alert(Employee.prototype .isPrototypeOf(employee1)); //true alert(Employee.prototype.isPrototypeOf(employee2));//true
は、コードがオブジェクトのプロパティを読み取るたびに実行されます。 、指定された名前の属性をターゲットとします。検索はオブジェクト インスタンス自体から始まります。指定された名前のプロパティがインスタンス内で見つかると、そのプロパティの値が見つかります。見つからない場合は、ポインタが指すプロトタイプ オブジェクトを介して検索が続行され、プロトタイプ内で指定された名前のプロパティが検索されます。物体。このプロパティがプロトタイプ オブジェクトで見つかった場合、このプロパティの値が返されます。これは、プロトタイプによって保存されたプロパティとメソッドをオブジェクト インスタンス間で共有する基本原則です。
前述したように、プロトタイプには最初はコンストラクター属性のみが含まれており、この属性も共有されるため、オブジェクト インスタンスを通じてアクセスできます。
プロトタイプに保存された値にはオブジェクト インスタンスを通じてアクセスできます。オブジェクト インスタンスを通じてオーバーライドすることはできません。プロトタイプの値をインスタンスに追加し、そのプロパティがインスタンス プロトタイプのプロパティと同じ名前を持つ場合、インスタンス内で作成された名前プロパティがシールドされます。 .net が非表示になります) 次のようにプロトタイプ内のそのプロパティを表示します:



コードをコピー
コードは次のとおりです: function Employee() { }; Employee.prototype.Age = 28;
Employee.prototype.Job = "ソフトウェア エンジニア";
Employee.prototype.SayName = function () {
alert(this.Name);
};
emplayee2.Name = "Sun";
alert(employee1. Name); //Jim
alert(employee2.Name); //Sun


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