JavaScriptの中の継承の組合せは継承します.
1674 ワード
コンビネーション継承は、疑似経典継承とも言われます.
名前の通り、プロトタイプチェーンと構造関数の長さを合わせて、プロトタイプチェーンを使ってプロトタイプの属性と方法の継承を実現し、構造関数を借りることによって、実例的な属性の継承を実現します.このように、プロトタイプ上の定義方法によって関数多重化が実現されるとともに、各インスタンスに独自の属性があることを保証することができる.
一例を見る.
このようにして、二つの異なるsubTypeの例をそれぞれの属性と同じ方法で持つことができる.
プロトタイプ鎖と借用構造関数の欠陥を組み合わせて継承し,それらの長所を融合させた.jsで最もよく使われている継承モードです.また、instance ofおよびisProttypeOf()は、コンビネーション継承に基づいて作成されたオブジェクトを識別するためにも使用され、
名前の通り、プロトタイプチェーンと構造関数の長さを合わせて、プロトタイプチェーンを使ってプロトタイプの属性と方法の継承を実現し、構造関数を借りることによって、実例的な属性の継承を実現します.このように、プロトタイプ上の定義方法によって関数多重化が実現されるとともに、各インスタンスに独自の属性があることを保証することができる.
一例を見る.
function superType(){
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(); // , constructor 。
subType.prototype.sayAge = function(){
alert(this.age);
}
var instance1 = new subType("Nico",20);
instance1.colors.push("black");
alert(instance1.colors); //red,blue,green,black
instance1.sayName(); //"Nico"
instance1.sayAge(); //20
var instance2 = new subType("Greg",28);
instance1.colors.push("black");
alert(instance1.colors); //red,blue,green
instance1.sayName(); //"Greg"
instance1.sayAge(); //28
superType構造関数は二つの属性を定義した:nameとcolors.superTypeのプロトタイプは、方法sayName()を定義しています.subTypeコンストラクタはsuperTypeコンストラクタを呼び出すときにnameパラメータを入力し、次に自分の属性ageを定義しました.そして、superTypeのインスタンスをsubTypeのプロトタイプに割り当てます.このときsubTypeのプロトタイプオブジェクトにはsuperTypeのインスタンス属性、nameおよびcolorsが継承されています.なぜインスタンスはこの2つの異なる属性のコピーを持つことができるのですか?subType()call()メソッドの呼び出しは、親クラスの実例となる属性の継承に相当し、サブクラスの実例となる属性は親タイプsuperType()のプロトタイプの属性をカバーするためである.このようにして、二つの異なるsubTypeの例をそれぞれの属性と同じ方法で持つことができる.
プロトタイプ鎖と借用構造関数の欠陥を組み合わせて継承し,それらの長所を融合させた.jsで最もよく使われている継承モードです.また、instance ofおよびisProttypeOf()は、コンビネーション継承に基づいて作成されたオブジェクトを識別するためにも使用され、