ECMAScriptの組み合わせ引継ぎ

1576 ワード

余談:
自分で枠を書いてみてこそ、原型、作用域、イベントエージェント、キャッシュシステム、タイマーなどの深い知識に触れる機会があります.
司徒正美『JavaScriptフレームデザイン』
起源
プロトタイプチェーンを単独で使用して継承します.
  • の利点は、prototypeを利用してデータの共有を実現し、これによって継承を実現する.
  • の欠点は、参照タイプ(たとえば配列)に関連する場合、一例によって参照タイプの値が修正されると他の例に影響を及ぼし、結合性が強すぎます.
  • 単独借用構造関数の継承:
  • の利点は、サブクラスは、スーパークラスにパラメータを伝えることができます.
  • の欠点は、方法はすべて構造関数で定義され、多重化可能性がない.
  • そのために、グループ継承が生まれました.
    基本概念
    コンビネーション継承とは、プロトタイプチェーンと借用構造関数の技術を組み合わせて、両者の長さを発揮する継承モードのことである.
    構想を実現する
    プロトタイプチェーンを使用してプロトタイプの属性と方法の継承を実現し,構造関数を借りることによってインスタンス属性の継承を実現した.このように、プロトタイプ上の定義方法によって関数多重が実現されるとともに、各インスタンスに独自の属性があることを保証することができる.
    //console     
    
    //          ,       
    function SuperType(name) {
        this.name = name;
        this.numbers = [1,2,3];
    }
    
    //       ,      
    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("MirrorAvatar", 3);
    instance1.numbers.push(33);
    instance1.numbers;  // "[1,2,3,33]"
    instance1.sayName();  //MirrorAvatar
    instance1.sayAge();  //3
    
    var instance2 = new SubType("Cindy", 4);
    instance2.numbers;  //"[1,2,3]"
    instance2.sayName();  //Cindy
    instance2.sayAge();  //4
     
    締め括りをつける
    プロトタイプチェーンと構造関数の欠陥を回避し、それらの利点を融合させ、JavaScriptで最も一般的な継承モードとなる.また、instance ofおよびisProttypeOf()は、組み合わせ相続に基づいて作成されたオブジェクトを識別するためにも使用されることができる.