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 関数の継承をシミュレートします。