GOFによって提案されたコード再利用には有名な原則があります。優先度は、クラスの継承ではなくオブジェクトの組み合わせを使用するために使用されます。 JavaScriptでは、クラスの概念がないため、コードの再利用はクラスの継承に限定されません。コンストラクターなど、JavaScriptにオブジェクトを作成するには多くの方法があります。新しいものを使用してオブジェクトを作成し、オブジェクトを動的に変更できます。また、他のオブジェクトを必要なオブジェクトに組み合わせる、オブジェクトミキシングテクノロジー、必要な方法を再利用するなど、JavaScriptには、非分類継承(最新の継承モードと呼ばれることができます)を再利用するための多くの方法があります。
古典的な継承モード - デフォルトモード
親と子の2つのコンストラクターの例:
コードコピーは次のとおりです。
function parent(name){
this.name = name || "Adam";
}
parent.prototype.say = {
this.nameを返します。
};
function child(name){
}
相続(子、親);
以下は、再利用可能なexensiT()関数の実装方法です。
コードコピーは次のとおりです。
関数継承(c、p){
c.prototype = new P();
}
ここで、プロトタイププロパティは関数ではなくオブジェクトを指す必要があるため、コンストラクター自体ではなく、親コンストラクターによって作成されたインスタンスを指す必要があります。
この後、子オブジェクトを作成すると、プロトタイプを介して親インスタンスから関数が得られます。
コードコピーは次のとおりです。
var kid = new Child();
kid.say(); // "adam"
継承されたプロトタイプチェーンを呼び出します:
さらに子供の特性を追加します:
コードコピーは次のとおりです。
var kid = new Child();
kid.name = "patrick";
kid.say(); // "patrick"
プロトタイプチェーンの変更:
オブジェクトプロパティに名前が見つかるため、プロトタイプチェーンを探す必要はもうありません。
上記のパターンを使用することの欠点の1つは、2つのオブジェクトのプロパティを同時に継承すること、つまり、これに追加されたプロパティとプロトタイププロパティです。ほとんどの場合、これらの属性は必要ありません。
もう1つの欠点は、Enturent()Enternit()Enternitを使用しても、サブコンストラクタへの渡しパラメーターをサポートしていないことです。たとえば、:
コードコピーは次のとおりです。
var s = new Child( "seth");
s.say(); // "adam"
この結果は予想されていません。子コンストラクターはパラメーターを親コンストラクターに渡すことができますが、子オブジェクトが必要になるたびにこの継承メカニズムを再実行する必要があり、親オブジェクトが最終的に再作成されるため、非効率的です。
この記事はここで終わります。将来、JavaScriptコードの再利用モードの残りのモードを引き続き更新します。