、プロトタイプ継承チェーン[ プロトタイプオブジェクトのコンストラクタは、親コンストラクタのサブインスタンスである ] [ プロトタイプのプロパティとメソッドを継承 ]
図1に示すように、各コンストラクタ[ プロトタイプ ]プロトタイプオブジェクトを有する、プロトタイプオブジェクトは、ポインタを含みます[コンストラクタポインタコンストラクタ ]、及び固形
の実施形態は、[プロトタイプオブジェクトへの内部ポインタを含む__proto__ ]。プロトタイプオブジェクトが継承されるタイプの更なるインスタンスと等しい場合。
例えば:
// 親クラス動物コンストラクタ作成 機能動物(名前、年齢){ この .nameの= 名; この .age = 年齢; } // 動物のプロトタイプオブジェクトにsayName()メソッドを追加 Animal.prototype.sayName = 機能(){ にconsole.log(この.nameの); } // オブジェクトインスタンス動物にサブクラス犬Dog.prototype] [プロトタイプオブジェクトポインタポインティング Dog.prototype = 新しい新しい動物(); // コンストラクタ犬犬型へのポインタ = Dog.prototype.constructor 犬; Dog.prototype.sayAge = 関数(){ にconsole.log(この.age); } // オブジェクトクラス犬犬のインスタンスを作成 するvar犬= 新しい新しい犬(「カイ」、2「イエロー」); dog.sayName(); // カイ[方法]は親クラスを呼び出すことができる 犬を.sayAge(); // 2 [メソッド自体プロトタイプオブジェクトを呼び出すことができます]
:2、慎重に定義された方法
[すべてのコードが連続してメソッドのプロトタイプを追加する必要があります後にスーパータイプのサブタイプの適用範囲や必要性の方法は、追加のスーパークラスメソッドに存在しないことは、文のプロトタイプを置き換えることです後 ]
3、プロトタイプチェーン関連の問題:
プロトタイプを通じて継承されたとき、元のインスタンスのプロパティは、現在、プロトタイプの属性となり、プロトタイプは実際には別のタイプの例になるだろう、達成され
ますが、サブタイプのインスタンスを作成するときに、B [スーパーコンストラクタにパラメータを渡すことができないバック擬似クラス継承解決します ]。したがって、めったに実際に単独で使用されないプロトタイプチェーン
2つの古典的な継承(疑似継承)[ 継承インスタンス属性 ]
1、サブクラスコンストラクタの使用コールを()または(適用)メソッドオブジェクトを変更する方法は、サブクラスと呼ばれ親クラスのコンストラクタの呼び出しを(呼び出しに使用コンストラクタ)または[適用()および
そのサブクラスのオブジェクトへのオブジェクトを呼び出す
例:
// 親クラス動物コンストラクタ作成 機能動物(名前、年齢){ この .nameの= 名; この .age = 年齢; } // 動物のプロトタイプオブジェクトにsayName()メソッドを追加 Animal.prototype.sayName = 機能(){ にconsole.log(この.nameの); } // 犬コンストラクタのサブクラス作成 機能犬(名前、年齢、色){ // 動物犬処理する関数を呼び出すように構成さ通話機能、指定されたオブジェクトを使用 Animal.callを(この、名前、年齢); この .color = カラー; } // 作成クラスインスタンスオブジェクト犬犬の VAR=犬新しい新しい犬( 'カイ'、2 'イエロー' ); にconsole.log(dog.name); // カイ
継承の第三の、組み合わせ(プロトタイプ継承鎖[鎖継承と組成擬似古典的な継承 ])一種しばしば使用される継承]
1、原理は、借入により実現プロトタイプ実装継承チェーンのプロパティとメソッド、およびコンストラクタのプロトタイププロパティの継承の例
例えば:
// 親クラス動物コンストラクタ作成 機能動物(名前、年齢){ この .nameの= 名; この .age = 年齢; } // 動物のプロトタイプオブジェクトにsayName()メソッドを追加 Animal.prototype.sayName = 機能(){ にconsole.log(この.nameのは); } // オブジェクトインスタンス動物動物作成 VAR動物を= 新しい新しい動物(,. '白' 1 ); animal.sayName(); にconsole.log(動物); // プロトタイプ継承チェーン、継承された親クラスのための一般的方法 // サブクラス犬Dog.prototype] [オブジェクトインスタンス動物を指すプロトタイプオブジェクトポインタ Dog.prototype = 新しい新動物(); // コンストラクタ犬犬のコンストラクタへのポインタ Dog.prototype.constructor = 犬; Dog.prototype.sayAge = 関数(){ にconsole.log(この.age); } // 構成犬のサブクラスを作成します関数 関数犬(名前、年齢、色){ / * this.name =名; this.age =年齢; * / // 古典継承(疑似継承)は、一般的な特性を継承 Animal.call(これは、名前、年齢)。 この .color = カラー; } // オブジェクト・クラスのインスタンス犬犬作成 するvar犬= 新しい新しい犬(「カイ」、2「黄色」); Dog.sayName(); // 親クラスのメソッドを呼び出すことができる dog.sayAgeを(); //は、自分自身を呼び出すことができる[オブジェクトのオブジェクトインスタンスの新しい動物()メソッドにプロトタイププロトタイプオブジェクトポイントフロント犬を有する // animal.sayAge(); //オブジェクトの親クラスのメソッドは、サブクラスのプロトタイプオブジェクトを作成するために使用することができないではない関数animal.sayAgeです // 配列は誰から継承された CONSOLE.LOG(Array.prototypeを.__プロト__コンストラクタを。); / / オブジェクト
次のように関連凡例は次のとおりです。