JS継承notes_jsオブジェクト指向

WBOY
WBOYオリジナル
2016-05-16 18:04:371122ブラウズ

JS の継承
JavaScript にはクラスの概念がなく、クラスに関連する継承の概念は問題外ですが、

特殊な構文を使用してオブジェクト指向言語の継承をシミュレートできます。
JS で継承をシミュレートする方法は数多くありますが、その中でも寄生結合モードは比較的簡単でシンプルなシミュレーション継承モードです。

継承をシミュレートするための寄生結合モードの使用方法を紹介します。
JS の継承には属性の継承とメソッドの継承が含まれており、これらはさまざまなメソッドを通じて実装されます。
1 属性の継承
属性の継承は、関数の実行環境を変更することで実現されます。関数の実行環境の変更は、call() と apply() という 2 つの

メソッドを使用して実現できます。
まず、Animal の「クラス」を作成します (JS にはクラスの概念がないため、ここでは単なるシミュレーションであり、実際には単なる

Function 関数オブジェクトです)。

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

Function Animal(name){
this.name =name;
}

別のライオンの「クラス」を作成し、Animal から「継承」します
コードをコピーします コードは次のとおりです。

Function Lion(){
Animal.apply(this, ["Lion"]);

ここでは、Animal の apply メソッドを使用して、Animal の実行環境を Lion 呼び出し時の実行環境に変更します。
ここで、Lion の「クラス」を使用したい場合は、通常、新しい Lion が必要であることを説明したいと思います。例:
var l = new Lion();
上記のコードでは、新しいキーワードは次のタスクを完了します:
1) 準備するヒープ領域を開きます。 Lion オブジェクト
を格納する 2) Lion 関数の this が Lion 関数オブジェクト自体を指すように、Lion オブジェクト自体の実行環境を変更します。
3) Lion「クラス」の「コンストラクタ」を呼び出してLionオブジェクトを作成します
4) 変数lにLion関数オブジェクトのヒープアドレスを代入します このとき、lはLion関数を指します。 object
so new キーワードの後、Animal.apply(this, ["Lion"]) の this はすでに Lion 関数オブジェクト自体を指しているため、

このコードは Animal 関数の実行環境を変更しますLion 関数では、次のコードと同等です:


コードをコピーします コードは次のとおりです:
function Lion( ){
Function Animal(name){
this.name=name;
}
}


このとき、これはすでに Lion 関数オブジェクトであるため、上記の段落のコードはさらに以下と同等です:


Function Lion(){
this.name=name;
}


これは、Lion 関数オブジェクトに name 属性を追加します。 Animal 関数から継承する Lion 関数の効果をシミュレートします。
2 メソッドの継承
JS のすべての「クラス」(つまり、関数、関数オブジェクトではないことに注意) には、prototype 属性があり、prototype は関数

のプロトタイプを表し、クラス A のコレクションも表します。メンバーの集まり (通常はメソッドのコレクション)。関数のプロトタイプ属性を通じてメソッド

の継承を実現できます。
最初に Animal の「クラス」も作成します:


コードをコピーします コードは次のとおりです:
Function Animal(name){
this.name=name;
}


Animal のプロトタイプに Eat メソッドを追加します:


Animal.prototype.eat=function(){
alter("食べられます!~") ;
}


Lion "クラス" を作成し、Animal "クラス" のプロパティの継承を完了します


Function Lion(){
Animal.apply(this, ["Lion"] );
}


次のコードに注目してください。メソッド
Lion.prototype=new Animal();
このようにして、Animal 関数オブジェクトが Lion のプロトタイプに格納されます。 、Lion は Animal のメソッドを含みます (実際には

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