言うまでもなく、この方法は比較的理解しやすく、サブクラスの親クラスのコンストラクターを呼び出します。さらに、この方法の最大の利点の1つは、継承を構築することで複数の継承を達成できることです。このコードを確認してください:
コードコピーは次のとおりです。
関数a()
{}
関数B()
{}
関数c()
{
this.father = a;
this.father();
this.fatherを削除します。
this.father = b;
this.father();
this.fatherを削除します。
}
しかし、この方法にはこれもあり、その欠点もあります。
オブジェクト指向に精通している場合は、このC#コードを見てみましょう。
コードコピーは次のとおりです。
クラスプログラム
{
staticVoid main(string [] args)
{
b b = newb();
bool temp =(typeof(a))。isinstanceoftype(b);
Console.WriteLine(TEMP);
}
}
クラス
{
パブリックa()
{
}
}
ClassB:a
{
public b()
{
}
}
結果は何ですか?もちろん、bは次の例です。
ただし、コンストラクトを使用して継承されたJavaScriptコードの上記のセクションでこのテストを行います。
コードコピーは次のとおりです。
関数a()
{}
関数B()
{}
関数c()
{
this.father = a;
this.father();
this.fatherを削除します。
this.father = b;
this.father();
this.fatherを削除します。
}
var c = new C();
アラート(c Instanceof a);
しかし、結果は私たちが想像したものではありません:
実際、説明は簡単です。構築された継承は、親クラスの構築方法を呼び出すことによってコピーされる親クラスの単なる特性です。他の検索は行われていないため、多くの資料はこの継承法の継承と呼ばれません。
欠点を見ている間、利点を覚えておいてください。より多くの継承をサポートします。
C#の継承を見ると、この継承との最も典型的な違いが2つあることがわかりました。C#は、多発性継承と、上記の建設的継承の欠点をサポートしていません。そのため、新しい継承方法が作成され、プロトタイプの継承になりました。
名前が表示されている場合、プロトタイプの継承はプロトタイプの特性を使用して継承を達成することであることを大まかに理解できます。これは、JavaScriptで最も人気のある継承方法です。プロトタイプを理解していない場合は、私の別の記事に注意してください:「プロトタイプで遊ぶ - プロトタイプ」。
最初にコードを見てみましょう。ここでは、「JavaScriptの王の帰還」からコードを引き出します。
コードコピーは次のとおりです。
関数ポイント(寸法)
{
this.dimensional = dimensional;
this.test = function(){
アラート(「成功」);
}
}
function point2d(x、y)
{
this.x = x;
this.y = y;
}
point2d.prototype = new Point(2);
var p = new point2d(3,4);
p.test();
テストが合格しました。これは、Point2Dが親クラスメソッドを継承し、インスタンスを調べたことを示しています。
アラート(Pインスタンスオフポイント);
成功!わかりました、プロトタイプの継承を分析しましょう。
プロトタイプの継承の利点については話しません。構造はシンプルで理解しやすく、インスタンスをインスタンスできます。しかし、彼の欠点も重要です。動物、人、女の子に関する私の以前の例を覚えていますか?プロトタイプ継承を使用して、以下を実装します。
コードコピーは次のとおりです。
function animal()
{
this.run = function(){alert( "i can run");};
}
機能担当者(名前)
{
this.say = function(){alert( "私の名前は"+this.name);}
}
people.prototype = new Animal();
機能ガール(名前、年齢)
{
this.age = age;
this.introduce = function(){alert( "私の名前は"+this.name+"。iam"+this.age);};
}
girl.prototype = new People(???);
私の赤い大胆な部分のコードラインに注意してください。人々は女の子のプロトタイプです。したがって、人を初期化するときは、名前パラメーターを渡す必要がありますが、各女の子の名前は異なるため、プロトタイプの継承の使用はありません。プロトタイプ継承段階では、親クラスオブジェクトを初期化するために使用するパラメーターを決定することはできません。機会2:とても簡単です。各クラスには1つのプロトタイプしか持てないため、プロトタイプの継承は複数の継承に使用することはできません。これは良いことであり、悪いことです。なぜなら:
JavaやC#などのオブジェクト指向の言語では、複数の継承はサポートされておらず、複数の継承はオブジェクト指向と互換性がないと考えられています
複数のインターフェイスを実装できません!
さて、今日私が書いたのはそれだけです。要約すると、プロトタイプの継承は、コンストラクト継承のいくつかの問題を解決し、いくつかの新しい問題を導入します。全体として、プロトタイプの継承は最も広く使用されている継承方法であり、JavaScript文法で継承を真に実装する方法でもあります。