簡単にjavascriptコード多重モードを話します.

1729 ワード

コード多重化には有名な原則があり、GoFが提案したものである.優先的にオブジェクトの組み合わせを使用し、クラスの継承ではない.javascriptにはクラスの概念がないので、コードの多重化はクラスの継承に限らない.javascriptではオブジェクトを作成する方法が多く、構造関数があり、newを使ってオブジェクトを作成し、オブジェクトを動的に修正することができます.javascriptの非類型継承(現代継承モードともいえる)多重化方法も多く、例えば、他のオブジェクトを必要なオブジェクトに組み合わせて、オブジェクト混入技術、借用と多重化に必要な方法.
クラス継承モード-標準モード
二つのコンストラクタParteとChildの例:
 
  
function Parent(name){
this.name = name||"Adam";
}
Parent.prototype.say = {
return this.name;
};
function Child(name){
}
inherit(Child,Parent);
以下は、相続関数inheit()を多重化することができる1つの実施方法である.
 
  
function inherit(C,P){
C.prototype = new P();
}
ここでプロトタイプの属性は、関数ではなくオブジェクトを指すべきです.したがって、彼は構造関数自体を指すのではなく、父の構造関数によって作成されたインスタンスを指す必要があります.
その後、Childオブジェクトを作成すると、Partのインスタンスからプロトタイプによって彼の機能が得られる.
 
  
var kid =new Child();
kid.say();//"Adam"
継承後のプロトタイプチェーンを呼び出します.
さらにkidの属性を追加します.
 
  
var kid = new Child();
kid.name = "Patrick";
kid.say();//"Patrick"
プロトタイプチェーンの変化状況:
自分の対象属性の中にnameを見つけることができます.プロトタイプのチェーンを探す必要はありません.
上記モードの欠点の一つは、2つのオブジェクトの属性、すなわち、thisに付加された属性とプロトタイプの属性を同時に継承することである.ほとんどの場合、これらの属性は必要ありません.
もう一つの欠点は、inheit()継承がサポートされていないことを使用して、サブアーキテクチャ関数にパラメータを渡すことです.例えば、
 
  
var s = new Child("Seth");
s.say();//"Adam"
この結果は期待されていません.子構造関数はパラメータを父構造関数に渡すことができますが、このようにすると、サブオブジェクトが必要となる度に、この継承機構を再実行しなければなりません.そして、効率が低下します.なぜなら、親オブジェクトを最終的に再作成するからです.
本論文はまずここに来ました.その後、javascriptコード多重モードの他のいくつかのモードを更新し続けます.