JavaScriptがオブジェクト指向の言語であるか、オブジェクト指向の言語であるかについて、誰もが自分の意見を持っていると思います。 JavaScriptの忠実なファンは、JavaScriptはオブジェクト指向の言語であると言わなければなりません。たとえば、本「The King of JavaScript」のJavaScriptに関する声明は、プロトタイプオブジェクト指向に基づいています。私の個人的な意見について話させてください。オブジェクト指向の3つの特徴:継承、多型、およびカプセル化。 JavaScriptはJavaやC#などのオブジェクト指向言語ほど高速ではありませんが、結局のところ特定のサポートもあります。したがって、JavaScriptはオブジェクト指向の言語であると言うのは理にかなっていますが、継承部分から一連の継承方法がありますが、各継承方法は真のオブジェクト指向言語の力を実現できません。したがって、それがオブジェクト指向であると言うのは大げさです。要約すると、JavaScriptの私の理解は、それを単純化されたオブジェクト指向の、または「擬似」オブジェクト指向と呼ぶことを望んでいます(この擬似ワードには軽rog的な意味はありません)。
今日は、オブジェクト指向の最初の特徴:継承について話しましょう。
継承とは何ですか?これについてナンセンスを話したくありません。動物、人、女の子がいます。これは、最も単純で典型的な継承チェーンです。
C#などのオブジェクト指向では、簡単です。
コードコピーは次のとおりです。
クラス動物
{}
クラスの人々:動物
{}
クラスガール:人
{}
JavaScriptには、実装を提供するクラスや相続はありませんが、どうすればよいですか?
オブジェクト変装(建設継承方法)
オブジェクトカモフラージュとは何ですか?私たちがConstruction継承と呼ぶかもしれないものは、理解しやすいです。名前が示すように、それはコンストラクターを使用して継承で遊ぶことです。実際、それは親クラスのコンストラクターが通常の方法と見なされ、それをサブクラスコンストラクターに入れて実行することを意味します。このようにして、オブジェクトを構築するとき、サブクラスオブジェクトはもちろん親クラスメソッドを構築できます!
上記の例を使用しましょう。コードは次のとおりです。
コードコピーは次のとおりです。
function animal()
{
this.run = function(){alert( "i can run");};
}
機能担当者(名前)
{
//ここで、親クラスの構築方法が渡され、親クラスの構築方法が実行されます。この時点で、親クラスの方法を使用できます。
this.father = animal;
this.father();
//それを削除することを忘れないでください。そうしないと、サブクラスが親クラスと同じ名前のメソッドに追加された場合、親クラスに変更されます。
this.fatherを削除します。
this.name = name;
this.say = function(){alert( "私の名前は"+this.name);}
}
機能ガール(名前、年齢)
{
this.father = people;
this.father(name);
this.fatherを削除します。
this.age = age;
this.introduce = function(){alert( "私の名前は"+this.name+"。iam"+this.age);};
}
このようにして、継承チェーンが実装され、テストは次のとおりです。
コードコピーは次のとおりです。
var a = new Animal();
a.run();
var p = new People( "Windking");
p.run();
p.say();
var g = new Girl( "xuan"、22);
g.run();
g.say();
g.introduce();
結果は次のとおりです。
a。
b。
c。
d。
e。
f。
テストは成功しました!
このコードのキーを要約し、親クラスを指定し、親クラスオブジェクトを宣言してから、一時変数を削除しましょう。少し面倒だと思いますか?少なくともそれは私が思うことです。削除を忘れたら、親クラスが変更されるリスクを負う必要があります。このために、私たちはこれを改善するために呼び出しを使用して応募します!
コードと上記の例を見てみましょう(誰もが理解しやすくするために、それを変更する必要性、動物には名前があります):
コードコピーは次のとおりです。
機能動物(名前)
{
this.run = function(){alert( "i can run");};
}
機能担当者(名前)
{
//コールメソッドを使用して継承を実装します
this.father = animal;
this.father.call(this、name);
this.name = name;
this.sayname = function(){alert( "私の名前は"+this.name;);};
}
機能ガール(名前、年齢)
{
//適用方法を使用して継承を実装します
this.father = people;
this.father.apply(this、new Array(name));
this.age = age;
this.introduce = function(){alert( "私の名前は"+this.name+"。iam"+this.age);};
}
同じテストコードを使用すると、テストが同じくらい成功したことがわかりました。
あなたが初心者なら、以下の2つのコードを見ると、少しめまいがするかもしれません。呼び出しとは何ですか? OK、Wanzhuan相続の特別なトピックで、私は補足問題シリーズを追加しました。これがわからない場合は、「Word of Wanzhuan:電話と応用」という私の記事を読むことができます。
オブジェクトの変装は、継承を実装する方法にすぎません。次の記事では、他の継承方法といくつかの継承方法の利点と短所について書き続けます。引き続き注意を払い続けます。