ホームページ >ウェブフロントエンド >jsチュートリアル >継承で遊ぶ Javascript (1)_JavaScript スキル

継承で遊ぶ Javascript (1)_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 16:49:021219ブラウズ

JavaScript がオブジェクト指向言語なのか、オブジェクトをサポートする言語なのかについては、人それぞれの意見があると思います。たとえば、JavaScript の忠実なファンは、JavaScript がオブジェクト指向言語であると言うはずです。たとえば、「JavaScript 王の帰還」という本では、JavaScript はプロトタイプに基づいたオブジェクト指向であると説明されています。私の個人的な意見をお話しさせてください。オブジェクト指向、継承、ポリモーフィズム、カプセル化の 3 つの特徴 Javascript は Java、C#、その他のオブジェクト指向言語ほど高速に実装できませんが、それでも一定のサポートはあります。したがって、JavaScript がオブジェクト指向言語であると言うのは理にかなっていますが、継承の観点から見ると、一連の継承メソッドがありますが、それぞれの継承メソッドでは真のオブジェクト指向言語の能力を実現することはできません。それはオブジェクト指向であると言われています。要約すると、JavaScript についての私の理解は、これを単純化されたオブジェクト指向、または「疑似」オブジェクト指向と呼ぶことを好むということです (この疑似という言葉には軽蔑的な意味はありません)。

今日はオブジェクト指向の最初の機能である継承について話します。
継承とは何ですか?これについてはナンセンスな話はしたくありません。これは最も単純で典型的な継承の連鎖です。
C# などのオブジェクト指向言語では、それは簡単です。

コードをコピー コードは次のとおりです。

class Animal
{ }
クラス People:Animal
{ }
クラス Girl:People
{ }

では、JavaScript には実装を提供するクラスや継承がありません。どうすればよいでしょうか?
オブジェクト迷彩(構造継承方法)
オブジェクト迷彩とは?わかりやすくするために、これを構造継承と呼ぶこともあります。名前が示すように、コンストラクターを使用して継承を操作します。実際には、親クラスのコンストラクターが通常のメソッドとみなされ、サブクラスのコンストラクター内で実行されることを意味します。この場合、オブジェクトを構築する際、サブクラスのオブジェクトは当然そのメソッドを構築できます。親クラス!

引き続き上記の例を使用すると、コードは次のようになります:

コードをコピー コードは次のとおりです。

function Animal()
{
.Run=function(){alert("I can run");};
}
function People(name)
{
//ここに親クラスのコンストラクターが渡されますで、親クラスのコンストラクタメソッドを実行します。 // このとき、親クラスのメソッドを使用できます。
this.father=Animal;
this.father();
//削除しないと、サブクラスが同じ名前のメソッドを親クラスに追加するときに変更されます。クラス。
delete this.Father;
this.name=name;
this.Say=function(){alert("私の名前は " this.name);}
}
function 女の子(名前,年齢)
{
this.father=People;
this.father(name);
this.father=age;
this.father(name);紹介=function(){alert("私の名前は " this.name ".私は " this.age);};
この場合、継承チェーンが実装されています:

コードをコピーします

コードは次のとおりです。var a=new Animal(); 🎜>a .Run(); var p=new People("Windking"); p.Say();
var g=new Girl(" Xuan", 22);
g.Run();
g.Say();
g.Introduc();

結果は次のとおりです:

a.

b.

c.

d.

e

f.

テストは成功しました!

このコードの要点をまとめて、親クラスの指定、親クラスのオブジェクトの宣言、そして一時変数の削除をしてみましょう。少なくとも私はそう思います。削除を忘れると、親クラスが変更されるリスクを負わなければなりません。これを改善するために、call と apply を使用します。
次にコードを見てみましょう。引き続き上記の例です (誰でも理解しやすくするために、要件が変更されており、動物には名前が付いています)。

コードをコピー コードは次のとおりです。

function Animal(name)
{
this.Run=function(){alert("I can Run");};
}
function People(name)
{
//呼び出しメソッドを使用して継承を実装します
this.father=Animal;
this.father.call(this,name);
this.SayName=function(){alert("私の名前は " this.name;) ;};
}
function Girl(name,age)
{
// apply メソッドを使用して継承を実装します
this.father=People; this.father.apply( this,new Array(name));
this.age=age;
this. Introduction=function(){alert("私の名前は " this.name " です。この.年齢);} ;
}


同じテスト コードを使用すると、テストは同様に成功することがわかりました。

初心者の場合、次の 2 つのコードに少し混乱するかもしれません。call とは何か、apply とは何か?さて、継承の遊びのトピックに補足シリーズを追加しました。これが理解できない場合は、私の記事「メソッドの遊び: call と apply」を読んでください。

オブジェクト偽装は継承を実現するための単なる手段です。次の記事では、引き続き他の継承方法といくつかの継承方法の長所と短所について書いていきます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。