ES 5/ES 6対象継承の実現

2290 ワード

対象に向けてカプセル化、継承、多形の3つの特性があることはよく知られています.JavaScriptでも同様です.対象となる参加例を通じて工場化生産を実現することは多くの資源を節約できます.
ES 6対象継承の実現
エス6の新しい文法classを通じてオブジェクトを作成し、extensは継承を実現します.
    //  Car 
    class Car{
        constructor(name,type){//Car    
            this.name = name;
            this.type = type;
        }
        //    Car        
        talk(){
            return this.name+"   "+this.type
        }
    }
    class smallCar extends Car{//  smallCar    Car 
        constructor(name,type){
            //          
            super(name,type);
        }
    }
    //   bmw  
    var bmw = new smallCar("  X5","suv");
    //   bmw         
    console.log(bmw.name);//"  X5"
    console.log(bmw.type);//"suv"
    console.log(bmw.talk());//"  X5   suv"
上記の例では、ClassによってCas類のオブジェクトを生成し、small Cas類extens関数によってCas類の共有属性と方法を継承し、super()方法によってsmall Casのインスタンスの各属性値を伝達し、属性値がない場合にはsuper()方法を必要とし、super()方法とextens)方法とは相補的に切り離せない.
ES 5原型オブジェクトによる継承が可能です.
コンストラクタによってプロトタイプ、コンストラクタがプロトタイプの指向を変えて継承を実現します.
    //1.       
    function Father(name,age) {
        //       
        this.name = name;
        this.age = age;
    }
    //2.        talk    
    Father.prototype.talk = function () {
        return "  "+this.name+",  "+this.age+" !"
    }
    //3.     
    function Son(name,age) {
        //3.1  call          this      ,
        //         this        super()        
        Father.call(this,name,age);
    }
    //4.                         
    //   __proto__   Father                 Son.prototype   
    //            constructor           prototype
    Son.prototype = new Father();
    console.log(Son.prototype.constructor);//   Father                Son         

    //5.                  
    Son.prototype.constructor = Son;

    //6.  Son   
    var son = new Son("  ","5")
    console.log(son.name);//  
    console.log(son.age);//5
    console.log(son.talk());//    ,  5 !
    //                 
ES 5では対象継承が難しく、サブプロトタイプのthisオブジェクトをcall()で伝えることで属性を継承する必要があります.親のプロトタイプのオブジェクトをサブプロトタイプのオブジェクトに上書きして継承する方法ですが、親のプロトタイプのオブジェクトはサブプロトタイプのオブジェクトのconstructor属性と一緒ですので、サブプロトタイプのオブジェクトの指向を変更する必要があります.ES 6は、クラスとSurperによってこれらの指向問題を解決し、より簡単に使用します.