オブジェクト指向プログラミングの継承の概念は、JSは、主に、継承チェーンのプロトタイプのメソッドを介して実装され、関与します。
コンストラクタ試作例との関係
それぞれが自動的に付属している機能の作成 プロトタイプ プロパティを。このプロパティは、オブジェクトへのポインタである私たちが呼ぶ、 プロトタイプオブジェクトを。ポインタとは何ですか?学校、プロトタイプオブジェクトのようなポインタの学生が学生です。私たちは、学生数を通じてのみ学生を見つけます。突然、ポインタがヌルに設定されているとすると、学生の数が空にリセットされ、慌てる必要はありません、学生は消えていなかった、まだオブジェクトです。見つけるのは難しいだけ。
デフォルトのプロトタイプオブジェクトは、プロパティの持つ コンストラクタを、このプロパティは、その関連コンストラクタへのポインタです。
有する例のコンストラクタを呼び出すことにより生成された、内部プロパティは、プロトタイプオブジェクトを指します。だから、インスタンスは、プロトタイプオブジェクトのすべてのメソッドやプロパティにアクセスすることができます。
3との間の関係は、それぞれ、プロトタイプオブジェクトのコンストラクタを有することであるため、プロトタイプオブジェクトはコンストラクタを指すポインタを含む、および実施例はすべて、プロトタイプオブジェクトへのポインタを含みます。ある人気の点では、インスタンスは、コンストラクタのポインタを介してプロトタイプオブジェクト、プロトタイプオブジェクトへの内部ポインタを介してアクセスすることができ、およびコンストラクタを見出すことができます。
私たちは、以下の例を参照してください。
1
2
3
4
5
6
7
8
9
|
function
Dog (name) {
this
.name = name;
this
.type =
'Dog'
;
}
Dog.prototype.speak =
function
() {
alert(
'wang'
);
}
var
doggie =
new
Dog(
'jiwawa'
);
doggie.speak();
//wang
|
コード上にコンストラクタ犬()を定義し、プロトタイプオブジェクトDog.prototypeは、独自の属性を向けもコンストラクタ犬、すなわちDog.prototype.constructor ==犬バック指す。例としては起因する内部ポインタに犬いわばプロトタイプオブジェクトは、メソッドにアクセスすることができます。
Dog.prototypeプロトタイプオブジェクトへのポインタだけが、オブジェクトは、それはまた、普通のオブジェクトであり、特に試作品ではありません。さんが言ってみましょう、この時点で、我々はオリジナルのプロトタイプオブジェクトへのDog.protptypeもはやポイントを聞かせが、クラス(動物)の別のインスタンス、状況が続い起こるのだろうか?
第二に、プロトタイプチェーン
以前の私たちは、そのプロトタイプオブジェクトへの内部ポインタのすべてのインスタンスを言って、すべての属性とメソッドは、プロトタイプオブジェクトにアクセスすることができます。例としては、犬のプロトタイプオブジェクトがアクセスできるすべてのプロパティおよびメソッドへの犬のプロトタイプオブジェクトポイント犬、犬のプロトタイプオブジェクトであれば、特定のクラスのインスタンスAAAに、この例では、この犬、AAAの新たなプロトタイプオブジェクトをポイントしますインスタンスの属性とAAプロトタイプオブジェクトのすべてのプロパティとメソッドは、AAAにアクセスすることができます。同様にあなたは、BBBにアクセスできるようになり、新しいプロトタイプオブジェクトがインスタンスであるBBB AAAが別のオブジェクトに起こり、これは新しいインスタンスBBB BBBのプロトタイプオブジェクトを指すようになりますし、すべての属性とプロパティのインスタンス上とは、今回のBBBプロトタイプオブジェクトをわんわん移動するための方法。
これは、JSは、プロトタイプチェーンを通じて達成継承されたメソッドです。次の例を見て:
動物//親クラスとしてコンストラクタ犬を定義する 関数動物(){ this.superTypeは= '動物'; } Animal.prototype.superSpeak =関数(){ アラート(this.superType); } 関数犬(名前) { this.name =名; this.type =「犬」; } 変更の//ポインタ犬のプロトタイプ、点動物インスタンスDog.prototype =新しい新しい動物(); 上記//ラインは、書き込みに相当する // VAR =新しい新しい動物動物(); //Dog.prototype =動物; Dog.prototype.speak =関数(){ アラート(this.type); } VAR =新しい新しいわんわん犬( 'jiwawa'); doggie.superSpeak()。 //アニマル
説明してください。上記のコードは、動物の新新しいインスタンスによって得られた最初の動物コンストラクタ()を定義し、それは、プロトタイプ属性と属性スーパーsuperSpeakのインスタンスを含むであろう。それに加えて、犬のコンストラクタを定義しました。そして、大胆な状況が変化し、ラインコードは、プロトタイプオブジェクトインスタンス犬の動物は、対象となりました。犬がsuperSpeakプロパティを訪問するようになったとき、JSは、最初のインスタンスのプロパティの犬になります、我々は見つけることができない見つかり、その後、jsのは、私たちが動物のインスタンスに変更されたプロトタイプオブジェクトの犬、犬のプロトタイプオブジェクトへ移動します、そのインスタンス上で動物を見つけることです。最初のインスタンスを行く動物属性見つかるかないsuperSpeack、そして最終的に動物のプロトタイプオブジェクトにこれが見つけ、えっ、行きました。
(私はあなたがそれを理解するためにこのチャートを願っています。)
これは、我々はプロトタイプチェーンを介してすべてのプロパティと犬の方法は、動物を継承を実現するためにできることを示しています。
要約する:プロトタイプオブジェクトDog.prototypeポイントを書き換えられ、内部ポインタのインスタンスは、新しいプロトタイプオブジェクトを指し、変更し、クラスとクラス間の継承を実現することができます。(オブジェクトのインスタンス生成、または初期プロトタイプオブジェクトへの内部ポインタ、プロトタイプを書き換える前に、次の時間私は記事応力を送信する場合は、JS連続ボローコンストラクタは継承されました)