オブジェクト向けJavaScriptの継承(一)クラス式継承


引用する
オブジェクト向けプログラミング言語はいずれも というメカニズムを有するが、JavaScriptはプロトタイプ(Prototype)に基づくオブジェクト向けプログラミングであるため、その実現方式もプロトタイプ(Prototype)に基づいて実現する.
継承の方法
  • クラス継承
  • コンストラクタ継承
  • 組合せ継承
  • プロトタイプ継承
  • 寄生式継承
  • 寄生組合せ式継承
  • 1.クラス継承
    //    
    function SuperClass(){
        //   
        this.superValue = true;
        //    
        this.book = ['c','java','htnl']
    }
    
    //       
    SuperClass.prototype.getSuperValue =function(){
        return this.superValue;
    }
    
    //    
    function SubClass(){
        this.subValue = false;
    }
    //    
    SubClass.prototype = new SuperClass();
    
    //       
    SubClass.prototype.getSubValue = function(){
        return this.subValue;
    }
    
    //  
    var a = new SubClass(); 
    var b = new SubClass(); 
    console.log(a.getSubValue()); //false
    console.log(a.getSuperValue());  //true
    
    console.log(a.book);//["c", "java", "htnl"]
    console.log(b.book);//["c", "java", "htnl"]
    a.book.push('css');
    console.log(a.book);//["c", "java", "htnl", "css"]
    console.log(b.book);//["c", "java", "htnl", "css"]
    
    console.log(a.getSuperValue())//true
    console.log(b.getSuperValue())//true
    a.superValue = 'a';
    
    console.log(a.getSuperValue())//a
    console.log(b.getSuperValue())//true
    
    console.log(a.getSubValue())//false
    console.log(b.getSubValue())//false
    a.subValue = 'sub';
    
    console.log(a.getSubValue())//sub
    console.log(b.getSubValue())//false

    テストにより には次のような特徴があることがわかります.
  • は、子のプロトタイプによって親を継承する例によって継承を実現する.
                 ,   a b            .        (   ,    )。       :   book   ,  subValue      ,       ,  2
    
  • 参照タイプは共通であり、値タイプはプライベートです.
      :              ,     ,     this    ,this.superValue       ,    a,  a       a    `prototype`,    ,      `"undefined"`,          a.book.push('css');    b.book       ,            book  , a.superValue = 'a';      a      superValue   ,       `prototype` superValue  ,          .
    

  • 次の節では、オブジェクト向けJavaScriptの継承(二)コンストラクション関数の継承について説明します
    リファレンス
  • 個人ブログ
  • JavaScript設計モード---張容銘著

  • 私は类式の継承の少しの理解に対して、もしそこの解釈の问题があるならば、どうぞよろしくお愿いします、ありがとうございます!