Javascriptプレイ継承(二)

6455 ワード

オブジェクトを偽装して継承を実現します.ここではまずこの方式の長所と短所を述べる.
この方法は比較的容易に理解でき,子クラスで親クラスの構造関数を呼び出す.また,この方法の最大の利点は,構造継承がマルチ継承を実現できることであり,このコードを復習することである.
function A()



{ }

function B()

{ }

function C()

{

this.father=A;

this.father();

delete this.father;

this.father=B;

this.father();

delete this.father;

}

しかし、この方法にはこのような欠点があります.
オブジェクト向けに詳しい私たちは、このようなC#コードを見てみましょう.
classProgram

{

staticvoid Main(string[] args)

{

B b=newB();

bool temp = (typeof(A)).IsInstanceOfType(b);

Console.WriteLine(temp);

}

}

classA

{

public A()

{



}

}

classB : A

{

public B()

{



}

}

結果は?bもちろんAの一例である.
しかし、上記の構造継承を用いたJavascriptコードについては、
function A()

{ }

function B()

{ }

function C()

{

this.father=A;

this.father();

delete this.father;

this.father=B;

this.father();

delete this.father;

}

var c=new C();

alert(c instanceof A);

しかし、得られた結果は私たちが想像していたほどではありません.
構造継承は親の構造方法を呼び出して複製した親の属性にすぎず、他の何も検索していないため、多くの資料ではこのような継承方式を継承と呼ばない.
欠点を見ながら、長所を覚えます.マルチ継承をサポートします.
C#の継承を見ると、この継承とは2つの最も典型的な違いがあります.C#はマルチ継承をサポートしていないことと、私が上述した構造継承の欠点があります.そこで新しい継承方式が生まれ、私たちは原型継承になりました.
名前を見ると,プロトタイプ継承はプロトタイプ(prototype)の特性を用いて継承を実現していることが大まかに理解できる.これはJavascriptで最も流行している継承方法です.プロトタイプについて理解していない場合は、私のもう一つの文章「プロトタイプを遊ぶ--prototype」に注目してください.まずコードを見てみましょう.ここでは、「Javascript王者の帰り」のコードを参考にします.
function Point(dimension)

{

this.dimension=dimension;

this.Test=function(){

alert("Success");

}

} www.jbxue.com

function Point2D(x,y)

{

this.x=x;

this.y=y;

}

Point2D.prototype=new Point(2);

var p=new Point2D(3,4);

p.Test();

テストに合格した.Point 2 Dが親のメソッドを継承していることを説明し、instanceを見てみましょう.
alert(p instanceof Point);
成功!はい、プロトタイプ継承を分析します.プロトタイプ継承の利点はもう言わないで、構造が簡単で、理解しやすくて、instanceができます.しかし、彼の欠点は同じように顕著で、私の前のAnimal、People、Girlについての例を覚えていますか?プロトタイプ継承で実現します.
function Animal() 

{ 

this.Run=function(){alert("I can run");}; 

} 

function People(name) 

{ 

this.Say=function(){alert("My name is "+this.name);} 

} www.jbxue.com

People.prototype=new Animal();

function Girl(name,age) 

{ 

this.age=age; 

this.Introduce=function(){alert("My name is "+this.name+".I am "+this.age);}; 

}

Girl.prototype=new People(???);

私の赤い太字の行のコードを見てください.PeopleはGirlのプロトタイプです.では、Peopleを初期化するときはnameパラメータを入力する必要がありますが、Girlごとに名前が違います.プロトタイプ継承が使用されない場合1:プロトタイプ継承段階で親オブジェクトを初期化するパラメータを特定できません.場合2:簡単で、クラスごとに1つのプロトタイプしか存在しません.つまり、プロトタイプ継承はマルチ継承には使用できません.これはいいことであり、悪いことでもある.理由:
JavaやC#などのオブジェクト向け言語では、もともとマルチ継承はサポートされておらず、マルチ継承はオブジェクト向けではないと考えられている複数のインタフェースを実現できません!さて、今日はこれについて書きます.まとめると、Prototype継承は構造継承のいくつかの問題を解決し、またいくつかの新しい問題を導入しました.全体的に、プロトタイプ継承は最も広く応用されている継承方式であり、Javascript文法における真の意味で継承を実現する方式でもある.