オリジナルの抜粋:https://www.cnblogs.com/gwf93/p/10384352.html
親クラスの車を書きます
機能車(名){ この .nameの= 名前; この .driver = 機能(){ はconsole.log( '千マイルの日' ) } } Car.prototype.addOil = 機能(パラメータ){ この .oil = のparam; コンソール.logの(この .nameの+ PARAM + + 'L' 'を毎日給油' ) }
(A)プロトタイプ継承チェーン。
コア:プロトタイプのサブクラスとして親クラスのインスタンス
INSTANCEOF:テスト・オブジェクトは、クラスのインスタンスであります
// プロトタイプ継承 関数baoma(){ } BaoMa.prototype = 新しい新しいプロトタイプサブクラスとして親クラスの車()//インスタンスは、キーを継承 BaoMa.prototype.name =「BMW」VAR baoMa1 = 新しい新しいbaoma()。サブクラスの例// はconsole.log(baoMa1.name) はconsole.log(baoMa1.addOil( 20である)) はconsole.log(baoMa1.driver()) はconsole.log(baoMa1 instanceofの CAR) // trueに はconsole.log (baoMa1 instanceofはカー)// trueに
-
特長:
- 純粋な継承は、インスタンスは、親クラスのインスタンスとしてだけでなく、サブクラスのインスタンスであります
- 親新しいプロトタイピング/ prototypeプロパティは、サブクラスにアクセスすることができます
- シンプルで、簡単に実装します
短所:
- コンストラクタは、例えば増加させることができる猫は猫のインスタンスを属性。あなたはプロトタイプのプロパティとメソッドを追加したい場合は、それを配置する必要があり
new Animal()
、このようなステートメントの後に実行します。 - 多重継承を達成することができません
- プロトタイプオブジェクトからすべてのプロパティは、すべてのインスタンスで共有されます
- あなたは、サブクラスのインスタンスを作成する場合、親クラスのコンストラクタにパラメータを渡すことはできません
(B)コンストラクタ継承:
// 构造继承 関数大衆(名){ Car.call(本) この .nameの名前= || '迈腾' ; } maiTengはせ = 新たな大衆を(); console.log(maiTeng.name)// 迈腾 はconsole.log(maiTeng.driver()) はconsole.log(maiTeng instanceofはカー)。// 偽 にconsole.log(maiTeng instanceofは大衆)// 真
特長:
- 解決し、サブクラスのインスタンスは、親クラス参照の問題1の特性を共有します
- インスタンスをサブクラス化するとき、あなたは親にパラメータを渡すことができます
- 多重継承(コールつ以上の親クラスのオブジェクト)を実装することができます
短所:
- インスタンスの例としては、親クラス、サブクラスの唯一のインスタンスではありません
- 例としては、親クラスの属性とメソッドを継承することができ、プロトタイプは継承プロパティ/メソッドはできません
- 多重化機能を実現することができない、各サブクラスのコピーは、親クラスのインスタンス機能は、パフォーマンスに影響を与えています
(C)クラス継承
ES6では、我々は使用することができます class
継承を実現するために、および実装することは簡単です
コア:使用して extends
いる親から継承ショー、およびサブクラスのコンストラクタで呼び出される必要があり super
、このコードは次のように見ることができ、 Animal.call(this, name)
c
lass
的本质就是函数
クラス大衆は車{拡張 コンストラクタ(名前){ スーパー(名前を)。 この .nameの= AME || '迈腾' ; } } maiTengせ = 新しい)大衆を(。 console.log(maiTeng.name)// 迈腾 はconsole.log(maiTeng.addOil(30)) // 迈腾每天加油30L はconsole.log(maiTeng.driver()) はconsole.log(maiTeng instanceofの CAR); //真 にconsole.log(maiTeng instanceofは大衆)// 真