コンストラクターの継承を借ります
プロトタイプに参照タイプの値を含めるという問題を解決する際に、開発者はbrobor造影者盗み(鍛造オブジェクトまたは古典的継承と呼ばれることもある)と呼ばれる手法を使用し始めました。この手法の基本的なアイデアは非常にシンプルです。つまり、サブタイプコンストラクター内のスーパータイプコンストラクターを呼び出します。
基本モード
関数supertype(){this.colors = ["red"、 "blue"、 "green"];} function suptype(){//継承SuperType SuperType.call(this);} var instance1 = new Subtype(); instance1.colors.push( "black"); alert(intance1.colors); // "赤、青、緑、黒" var instance2 = new subtype(); alert(instance2.colors); //「赤、青、緑」基本的なアイデア
借入コンストラクターの基本的なアイデアは、コールを使用するか、親クラスで指定されたプロパティとメソッドをサブクラスによって作成されたインスタンスにコピー(借用)することです。このオブジェクトは、関数の実行環境に基づいて実行時にバインドされるためです。つまり、グローバルに、これはウィンドウに等しく、関数がオブジェクトの方法と呼ばれる場合、これはそのオブジェクトに等しくなります。通話および適用メソッドを使用して、別のオブジェクトの代わりにメソッドを呼び出すことができます。呼び出しおよび適用メソッドは、関数のオブジェクトコンテキストを初期コンテキストからthatOBJによって指定された新しいオブジェクトに変更できます。
したがって、この借入コンストラクターは、新しいオブジェクトが呼び出される場合(新しい演算子は直接コールとは異なることに注意してください。関数が呼び出されると、ウィンドウをポイントします。新しいインスタンスが作成されると、新しいインスタンスオブジェクトが作成され、サブタイプのコードが実行されます。サブタイプの呼び出しはSuperTyepを呼び出します。つまり、このポインティングは新しいインスタンスを指すように変更されるため、SuperTypeのこの関連属性とメソッドは、Suptypeに割り当てるのではなく、新しいインスタンスに割り当てられます。すべてのインスタンスには、親クラスによって定義されたこれらのプロパティと方法があります。
利点
プロトタイプチェーンと比較して、コンストラクターを借用するには大きな利点があります。つまり、サブタイプコンストラクターのスーパータイプコンストラクターにパラメーターを渡すことができます。属性はこれに拘束されるため、呼び出されたときに対応するインスタンスに割り当てられ、各インスタンスの値は互いに影響しません。
例えば:
function supertype(name){this.name = name;} function subtype(){// supertypeを継承し、パラメーターsupertype.call(this、 "nicholas"); // instance属性this.age = 29;} var instance = new subtype(); alert(instance.name); //"nicholas"; alert(instance.age); // 29短所
コンストラクターを借りるだけの場合、コンストラクターパターンの問題は回避されません。メソッドはすべてコンストラクターで定義されているため、関数の再利用について話す方法はありません。さらに、スーパータイプのプロトタイプで定義されている方法は、サブタイプにも見えないため、すべてのタイプはコンストラクターパターンのみを使用できます。これらの問題を考えると、コンストラクターを借用する手法も単独で使用されることはめったにありません。
組み合わせ継承
擬似クラシック継承と呼ばれることもある組み合わせ継承。これは、プロトタイプチェーンと借りたコンストラクターテクノロジーを1つのピースに組み合わせて、両方の強みを再生する相続モデルです。
基本的なアイデア
アイデアは、プロトタイプチェーンを使用して、プロトタイプの特性と方法の継承を実装し、コンストラクターを借用してインスタンスプロパティの継承を実装することです。このようにして、関数の多重化はプロトタイプでメソッドを定義することによって達成され、各インスタンスに独自の属性があることを保証することもできます。
基本モデル
function supertype(name){this.name = name; this.colors = ["red"、 "blue"、 "green"];} supertype.prototype.sayname = function(){alert(this.name);}; function subtype(name、age){//遺伝属性supertype.call(this、name); this.age = age;} //継承方法subtype.prototype = new supertype(); subtype.prototype.constructor = subtype; subtype.prototype.sayage = function(){alert(this.age);}; var instance1 = new subtype( "nicholas" 29); instance1.colors.push( "black"); alert(instance1.colors); // "赤、青、緑、黒" instance1.sayname(); // "nicholas"; instance1.sayage(); // 29var instance2 = new Subtype( "Greg"、27); alert(instance2.colors); //「赤、青、緑」instance2.sayname(); // "greg"; instance2.sayage(); // 27利点
組み合わせ継承は、プロトタイプチェーンと借用コンストラクターの欠陥を回避し、その利点を組み合わせて、JavaScriptで最も一般的に使用される継承パターンになります。
短所
継承を組み合わせた最大の問題は、いずれにしても、スーパータイプコンストラクターが2回呼び出されることです。サブタイプのプロトタイプを作成するときに1回、サブタイプコンストラクター内の他の問題です。サブタイプには最終的にSuperTypeオブジェクトのすべてのインスタンスプロパティが含まれますが、サブタイプコンストラクターを呼び出すときにこれらのプロパティをオーバーライドする必要があります。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。