プロトタイプ連鎖継承
継承
Vip.prototype = new Breast();//プロトタイプ連鎖継承の核となるステートメント
デメリット
- プロトタイプチェーンに参照値を持つプロトタイプが含まれている場合、参照値はすべてのインスタンスで共有されます。
- サブタイプを作成する際、スーパータイプのコンストラクタにパラメータを渡すことはできません。
コンストラクタ継承からの借用
継承
の呼び出しは親コンストラクタを実行し、this にバインドします。
継承の特徴:
親コンストラクタの内容を子コンストラクタに混ぜるように
// 親クラスを定義する
function Breast(sizes_index){
this.sizes = [1100, 1200, 1300] ;
this.sizes_index = sizes_index;
this.show = function () {
breast_image.style.height = this.sizes[sizes_index] + "px";
}
}
//
function Vip(){
Breast.call(this); // このコードは、コンストラクタの助けを借りて部分継承を実装し、thisをバインドして親コンストラクタを実行する。
}
const vip_G = new Vip();
const vip_H = new Vip();
const vip_I = new Vip();
プロトタイプチェーンの2つの大きな問題を解決します。
- プロトタイプ・チェインにおける参照型の値の独立性が保証されます。
- もはやすべてのインスタンスで共有されることはありません。サブタイプは、作成時に親にパラメータを渡すこともできます。
デメリット: コンストラクタを借用しただけでは、コンストラクタ・パターンの問題を回避することはできません - メソッドはコンストラクタ内で定義されるため、関数の再利用は不可能です。 また、スーパータイプで定義されたメソッドはサブタイプからは見えません。
組合せ継承
つまり
function Vip(){
Breast.call(this);
}
Vip.prototype = new Breast();
const vip_G = new Vip();
const vip_H = new Vip();
const vip_I = new Vip();
プロトタイプ継承
const breast = {
sizes: [1100, 1200, 1300],
};
function object (o) {
function F () {}
F.prototype = o;
return new F ();
}
const vip_G = object (breast);
const vip_H = object (breast);
寄生継承
寄生組合せ継承
は、以前の借用コンストラクタ、プロトタイプ、寄生継承を改良したものです。
inheritPrototype(Vip, Breast);
function object (o) {
function F () {}
F.prototype = o;
return new F ();
}
function inheritPrototype(son, father) {
let x = object(father.prototype);
x.constructor = son ;
son.prototype = x;
}





