JavaScriptのプロトタイプとは何ですか?読んだ後、あなたは理解します

おなじみの友人は、すべてのそのソフトウェアの開発を知って、プロトタイプは通常、デモの目的や構造の一部のためのプログラムを開発、基本的な実用新案または製品データシステムです。プロトタイプ自明の重要性は、その後、私はあなたのためにJavaScriptでプロトタイプの概念を説明します。
解釈プロトタイプオブジェクト
の各オブジェクトがプロトタイプオブジェクトと呼ばれ、コンストラクタオブジェクト、それに関連しています。
オブジェクトの各インスタンスは、それらの特性およびプロトタイプオブジェクトのメソッドを共有することができます。
オブジェクトがメモリ割り当てを減らす、プロトタイプのオブジェクトプロパティのインスタンスを共有することができるように、継承プロパティを実装するためのプロトタイプオブジェクトの主な役割。
だから、前のセクションでは、我々はこの方法を達成することができ、各Personオブジェクトで言う方法を共有したいと思います。
人関数(名前、年齢){
this.name =名;
this.age =年齢;
} //関数のプロトタイプオブジェクト、共有機能のオブジェクトのインスタンス言う追加
Person.prototype.say =関数(){
にconsole.log( "挨拶");
}; VAR Pは=人新しい新規( "ZS"、10)と言う。
p.sayを(); VAR新しい新しいP2 =人物( "ZS"、10、たとえば);
p2.say()。
プロトタイプオブジェクトにメンバーを追加する方法
。コンストラクターのメンバーは、メンバーの名前=値.prototype;
Personがプロトタイプオブジェクトを言うための添加方法の後に、複数のインスタンスで共有方法の実装は、機能オブジェクト。
プロトタイプオブジェクトを取得します:
コンストラクタ.prototype
.__プロト__インスタンスオブジェクトは、
オブジェクトの各インスタンスのプロパティ__プロトを有し、オブジェクトは、オブジェクトのプロトタイプを得ることです。
Person.prototype == Pプロト__; //真 。
次の図は、オブジェクト間の関係について詳しく説明します。

 

 

コアオブジェクト指向の概念
コンストラクタ:人、そして新しいキーワードでオブジェクトを作成し
、コンストラクタのプロトタイプオブジェクト:Person.prototype、
プロトタイプオブジェクト:オブジェクトとインスタンスのコンストラクタを作成する相互
インスタンスオブジェクトを:コンストラクタで作成されましたたとえば、呼び出されたオブジェクト
のインスタンス化:作成プロセスのインスタンスは、コンストラクタでインスタンス化によって呼び出される
+メソッド属性:オブジェクトのメンバー
インスタンスメンバー:インスタンスオブジェクト、名前、年齢、オブジェクトの現在のインスタンスのみのプロパティとメソッドアクセスの
原型メンバー:プロトタイプオブジェクトのプロパティとメソッドは、(言う)、コンストラクタにプロトタイプオブジェクトの対応を使用して、オブジェクトのすべてのインスタンスが出て作成しアクセスすることができる
静的メンバー:直接コンストラクタでプロパティとメソッドを追加し、使用のみコンストラクタのアクセスに
__プロト属性が記述
属性指定は、唯一ES6の後に含まれ、この前に、ブラウザの実装の一部のみ。
このプロパティは、P。プロトとして、オブジェクトの指定されたプロトタイプ・オブジェクト・インスタンスを取得することができる、とPerson.prototypeは、取得した
我々は、指定されたインスタンスオブジェクトを取得するオブジェクトのコンストラクタ(インスタンスオブジェクト)メソッドを使用することができgetPrototypeOfプロトタイプオブジェクトを
三種類は、上記のプロトタイプオブジェクトのメソッドは、得られた結果は同じです取得します。すなわち:
。Object.getPrototypeOf(P)P == == Person.prototypeプロト__
拡張組み込みオブジェクト
組み込みオブジェクト、使用されているオブジェクトは、直接そのような被験体に、使用することができるオブジェクトJSに予め定義された良好なパッケージ簡単に基本的な機能を実行する開発を可能にするメソッドとプロパティの束。
しかし、これらのプロパティやメソッドの実際の開発では、当社のニーズを満たすことができない場合があり、その後、我々はこれらの組み込みオブジェクトへの拡張を行う必要があります。
需要:オブジェクトを配列要素番号の取得方法を追加
ARR1 =のVARが、VaRのARR2は、[ "A"、 "B"、 "C"、 "D"] =である[1、2 ,. 3]
arr1.getLength関数= (){
this.lengthを返す;
}はconsole.log(arr1.getLength());
上記アレイARR1その要素の数を取得するためのgetLength()メソッドを追加し、そのオブジェクトARR2この方法の場合はありますか?私たちはすべて知っている答えであると信じています。あなたはARR2にしたい場合は、同じ機能を持っているだけでなく、同じ操作を必要としています。
それが望ましい。このように、このような機能をしたいために、アレイ100が必要な場合は、操作がより複雑です。
前回学んだ知識によると、我々はこの問題を解決するためにプロトタイプを使用することができます。
ARR1 = VAR [1,2 ,. 3。]; VARのARR2は= [ "A"、 "B"、 "C"、 "D"]; Array.prototype.getLength =関数(){
this.lengthを返す;
}コンソール。ログ(arr1.getLength()); // 3console.log(arr2.getLengthは()); // 4
我々は、配列のプロトタイプオブジェクトに直接のgetLength()メソッドを追加し、すべての後に作成されたオブジェクトの配列を持っています取得する方法!
このアプローチは、私たちの問題を解決することができますが、問題はまだあります。

あなたは組み込みの拡張ないオブジェクト、他の開発者が影響を受ける可能性があるのこの方法を使用する場合は、多人数開発環境では、
あなたがプロトタイプオブジェクトにあまりにも多くのメンバーを追加した場合、検索対象のメンバーの効率が低下します。
拡張内蔵のオブジェクトセキュリティ
組み込みオブジェクト上でいくつかの問題を拡張するための重要な方法は、実際には、問題は、我々は、オブジェクトを使用する他の開発者への影響につながる、オブジェクトの上に直接構築されたプロトタイプを拡大することであるということです。
だから、私たちのアイデアは、オブジェクトが組み込みオブジェクトを拡張する必要性を継承するように、カスタムオブジェクトを解決することであり、そして唯一の指定されたオブジェクトで動作する必要がありますすることができます。
MyArrayという関数(){
} //方向付けメイクプロトタイプMyArrayという// Arrayオブジェクトは、すべてのメンバを継承すなわちアレイ
MyArray.prototype =新しい新しいArray();
MyArray.prototype.getLength =関数(){
戻りthis.length;
} VAR = ARR1()の新しい新MyArrayという。
arr1.push( ""、 "B"、 "C"、 "D"、 "E"); //最初の組み込みオブジェクトのメソッドはconsole.log(arr1.getLength())。 //拡張メソッドの後に
あなたがするアレイを拡張したい場合は、次の、我々は唯一の直接操作配列を必要とせずに、MyArrayという缶を操作する必要があるので、他の開発者は、影響を受けた利用の配列の操作に持っていません。図は理解して:

 

 

図プロトタイプ鎖構造
オブジェクトの各インスタンスのためには、コンストラクタによって作成され
、それぞれが既定のコンストラクタ関連プロトタイプオブジェクト有し
、それはまた、独自のコンストラクタ有するので、プロトタイプオブジェクトは、オブジェクト自体である
コンストラクタのプロトタイプオブジェクトは、関連するデフォルトを有していますプロトタイプオブジェクト
上記は、プロトタイプチェーンと呼ばれる、チェーン・アクセス・アーキテクチャを構成する
プロトタイプチェーン示す人物オブジェクトArrayオブジェクト次


 

 

上記は指摘してくださいまた、不適切があれば、これは、ビューの唯一の自分のポイントである私の理解プロトタイプチェーンのプロトタイプです。私はそれに答えるところあなたを助けることができていたように、私たちは一緒に進歩を遂げることができると思います。

おすすめ

転載: www.cnblogs.com/waiwei/p/12079684.html