コンストラクタ
クラスの宣言
1.function声明
関数動物(名){
this.name =名
}
2.class声明
クラス動物{ コンストラクタ(名前){ この .nameの= 名 } }
クラスのインスタンス化
new演算子の例
動物は=ましょう新しいアニマル(「豚」)
クラスの継承
// コンストラクタによって継承 機能親1(){ この .nameの=「親1」 } 関数CHILD1(){ Parent1.call(この); この .TYPEは=「child1の」 } // 不足、プロトタイプは、完全に親1を継承することができませんプロパティとメソッド
//定義され、例えばParent1.prototype.pName =「はpName」CHILD1は継承できません
// プロトタイプ実装継承チェーンの手段 関数parent2(){ この .nameの= 'parent2、' この .arrは= [1,2,3 ] }; 機能CHILD2(){ この .TYPE = 'child2の' } Child2.prototype = 新しい新parent2は(); // コンストラクタ内のオブジェクトがある場合不足、次に別の例に影響を与えるオブジェクトのインスタンスのパラメータを変更し、 // ARRであるのでS1 .__ proto__ === S2 .__ proto__共通のプロトタイプオブジェクト、参照型の値である S1 = 新しい新; CHILD2() S2 = 新しい新しいCHILD2(); (s1.arr.push。4 ) にconsole.log(s1.arr、s2.arr) // (4)。[1、2、 3、4](4)[1、2、3、4]
// 。組み合わせ1つの 機能Parent31(){ この .nameの= 'P31' ; この .arr = [1,2,3 ] } 関数Child31(){ Parent31.call(この); // 属性の構造を取得します方法及び この .TYPE = 'C31' ; } Child31.prototype = 新しい新しい Parent31(); //は、プロパティメソッドとプロトタイプを取得 するvar S3 = 新しい新しいChild31を(); VARの S4 = 新しい新しいChild31(); s3.arr.push ( 4 ) はconsole.log(s3.arr、s4.arr)// [1,2,3,4] [1,2,3] // 実行の数を減らす組合せ最適化2、Parent31コンストラクタ 関数Parent33(){ この .nameの=「P33」 } 関数Child33(){ Parent33.call(この); // 取得した構造は、属性および方法 この .TYPE =「C33」; } VARのテスト= 新しい新しいChild33(); Child33.prototype = Parent33.prototype; // 取得プロパティメソッドとプロトタイプ // それらの2つ以上のプロトタイプの継承は、同じコンストラクタに結果であるので console.log(テストinstanceofは、テストをChild33をinstanceofは Parent33)// trueにtrueに // 組合せ最適化3 機能Parent5(){ この .nameの= 'P5' } 関数Child5(){ Parent5.call(この); // 取得プロパティメソッドとの構造 この .TYPE = 'C5' ; } VARの TEST2 = 新しい新しいChild5( ); Child5.prototype ; = Object.create(Parent5.prototype)
Child5.prototype.constructor = child5
//object.create方法は、新しいオブジェクト、__proto__の新しく作成されたオブジェクトの使用を提供する既存のオブジェクト作成し得るプロトタイプ上をプロパティとメソッドは、コンストラクタの変更 はconsole.log(TEST2 instanceofは Child5、test2はinstanceofは Parent5)// 真falseにします
// 延びにおけるES6クラス継承 クラスA { コンストラクタ(){ この .nameのは= 'A' } (言う){ にconsole.log( '言う' ) } }
//使用がinstanceofの例示問題の連続Bでは延在し B延び{クラスの コンストラクタ(){ スーパー(); //はA.prototype.constructor.callに対応する(この) この .TYPE = 'B' } }