継承は、ほとんどの言語で重要です。JavaScriptは、これは、オブジェクトが他のオブジェクトから直接継承することができることを意味し、プロトタイプベースの言語です。ここではいくつかの共通のJS継承されています。
- プロトタイプ継承チェーン
機能父(){ この .status = 真。 } Father.prototype.getSuper = 関数(){ 戻り 、この.statusと、 }。 機能ソン(){ この .substatus = 偽。 } // 继承了スーパー Son.prototype = 新しい父()。 Son.prototype.getSub = 関数(){ 戻り 、この.substatusと、 }。 VaRのインスタンス= 新しい息子(); 警告(instance.getSuper()); //真
- 借入コンストラクタの継承
機能父(){ この .colorsの= [1,2,3 ]。 } 関数ソン(){ // 继承了父 Father.call(本) } VARのインスタンス1 = 新しい子(); instance1.colors.push( 4 )。 警告(instance1.colors)。// "1,2,3,4" のvar instance2を= 新しい息子(); 警告(instance2.colors)。// "1,2,3"
- 継承の組み合わせ
関数父(名前){ この .nameの= 名; } Father.prototype.sayName = 関数(){ アラート(この.nameの); }; 関数息子(名前、年齢){ // 継承されたプロパティ SuperType.call(本、名); この .age = 年齢; } Son.prototype = 新しい新;父親()監督//プロトタイプの親クラスのサブクラス Son.prototype.constructor = 息子が; //サブクラスのコンストラクタ自身を指すように Son.prototype。 sayAge = 関数(){ アラート(この。年齢); }。 VaRのインスタンス= 新しい息子( "LH"、19 ); instance1.sayName(); // "LH"。 instance1.sayAge(); // 1 9
- 原型継承
関数オブジェクト(O){ 関数F(){} F.prototype = O。 返す 新しい)F(; } VARの人物= { 名: "LH"は、 愛する:[ "A"、 "B"、 "C" ] }。 VAR anotherPerson = オブジェクト(人)。 anotherPerson.name =「グレッグ」。 anotherPerson.friends.push( "D" ); 警告(person.loves)。// "B、C、D"
対象と方法は、類似Object.create()メソッドを、本明細書。
- 寄生継承
関数オブジェクト(O){ 関数F(){} F.prototype = O; 戻り 新しい新しいF.を(); } 関数createAnother(OBJ){ VARのクローン=オブジェクト(OBJ); // 関数を呼び出すことによって、新しいオブジェクトを作成 クローン。 =言う関数(){ //ためのオブジェクト添加する方法 警告( "こんにちは" ); }; 戻りクローン; // オブジェクトを返す } VARの人数= { 名称: "LH"は、 愛する:[ "A"、「B "" C " ] }; VAR anotherPerson =createAnother(人)。 anotherPerson.say(); // "HI"
- 組み合わせ寄生継承
関数inheritPrototype(息子、父親){ VARのプロトタイプ= Object.create(father.prototype)。 son.prototype =プロトタイプ。
prototype.constructor =息子。 } 関数父(名前){ この .nameの= 名前。 } Father.prototype.sayName = 関数(){ アラート(この.nameの)。 }。 機能息子(名前、年齢){ Father.call(これ、名); この .age = 年齢; } inheritPrototype(息子、父)。 - ES6が達成使用
クラス父{ コンストラクタ(X、Y){ この .X = X。 この .Y = Y。 } } クラス息子が延びる父{ コンストラクタ(X、Y、年齢){ スーパー(X、Y)// 调用父类的コンストラクタ(x、y)が この .age = 年齢。 } のtoString(){ 戻り 、この .colorを+ '' + super.toString()。// 调用父类的のtoString() } }
サブクラスは、親クラスのコンストラクタは、最初のそれ以外の場合はエラーになり、これにアクセスするには、スーパー()メソッドを呼び出す必要があります継承します。