今回は、組み合わせ、プロトタイプ、寄生虫、寄生の組み合わせ継承方法について説明します。
1。組み合わせ継承:擬似学的継承としても知られている、それはプロトタイプチェーンと借用コンストラクターテクノロジーを1つのピースに組み合わせた継承方法を指します。
例を見てみましょう:
function supertype(name){this.name = name; this.colors = ["red"、 "blue"、 "緑"]; } supertype.prototype.sayname = function(){alert(this.name); } function subtype(name、age){supertype.call(this、name); this.age = age; } //継承方法subtype.prototype = new SuperType(); subtype.prototype.sayage = function(){alert(this.age); } var instance1 = new Subtype( "Nicholas"、29); instance1.colors.push( "black");アラート(instance1.colors); //赤、青、緑、ブラックinstance1.sayname(); // nicholas instance1.sayage(); // 29 var instance2 = new Subtype( "Greg"、27);アラート(instance2.colors); //赤、青、緑色のinstance2.sayname(); // greg instance2.sayage(); // 27組み合わせ継承は、プロトタイプチェーンの欠点を回避し、コンストラクターを借りることを回避し、その利点を統合します。
2。プロトタイプの継承
継承は、定義されたコンストラクターなしで実装でき、本質的に特定のオブジェクトの浅いコピーを実行します。コピーされたコピーをさらに変更できます。
function object(o){function f(){}; f.prototype = o;新しいfを返します。 } var person = {name: "nicholas"、friends:["shelby"、 "court"、 "van"]}; var anotherperson = object(person);別の人。name= "greg";別の人。FriendS.Push( "Rob"); var anotherperson = object(person);別の人。name= "linda";別の人。FriendS.Push( "Barbie");アラート(Person.Friends); //シェルビー、コート、ヴァン、ロブ、バービー3。寄生性継承
プロトタイプの継承と非常によく似ています。また、オブジェクトまたはいくつかの情報に基づいてオブジェクトを作成してから、オブジェクトを強化し、最後にオブジェクトを返すことでもあります。スーパータイプコンストラクターへの複数の呼び出しによる組み合わせ継承パターンによって引き起こされる非効率性の問題を解決するために、このパターンは組み合わせ継承で使用できます。
function object(o){function f(){}; f.prototype = o;新しいfを返します。 } function createanother(original){var clone = object(original); clone.sayhi = function(){alert( "hi"); };クローンを返します。 } var person = {name: "nicholas"、friends:["shelby"、 "court"、 "van"]}; var anotherperson = createanother(person);別の人。sayhi();4.寄生的な組み合わせ継承
寄生的相続と組み合わせ継承の利点を組み合わせることは、基本的なタイプの継承を達成するための最も効果的な方法です。
//プロトタイプ関数の継承拡張(subtype、supertype){function f(){}; f.prototype = supertype.prototype; varプロトタイプ= new F; prototype.constructor = subtype; subtype.prototype = prototype; } // superclassメソッド関数supertype(name){this.name = name; this.colors = ["red"、 "blue"、 "緑"]; } supertype.prototype.sayname = function(){return this.name; } //サブクラスメソッド関数SuperType(name){this.name = name; this.colors = ["red"、 "blue"、 "緑"]; } supertype.prototype.sayname = function(){return this.name; } // subclassメソッド関数subtype(name、age){supertype.call(this、name); this.age = age; } //プロトタイプextend(subtype、supertype); // subclass method subtype.prototype.sayage = function(){return this.age; } var instance1 = new Subtype( "Shelby"); var instance2 = new Subtype( "Court"、28); instance1.colors.push( 'black');アラート(instance1.colors); //赤、青、緑、ブラックアラート(instance2.colors); //赤、青、緑のアラート(instance1 instanceof subtype); // true alert(instance1 instanceof supertype); //真実この例の効率は、スーパータイプコンストラクターを1回だけ呼び出すため、サブタイプのプロトタイプに不必要な不必要なプロパティを作成することを避けることに反映されています。同時に、プロトタイプチェーンは変更されていない場合があります。したがって、instanceofおよびisprototypeof()も正常に使用できます。開発者は一般に、寄生的な組み合わせ継承が参照タイプの最も理想的な継承パラダイムであると考えています。
上記の記事JSオブジェクト指向の継承 - 複数の組み合わせ継承の詳細な説明は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。