JavaScript寄生組合式繼承分析

JavaScript寄生組合式繼承特色:app

避免了在子類prototype上建立沒必要要多餘的屬性,相比直接繼承基類的實例效率要高。函數

是JavaScript 實現繼承的最有效方式。this

<script>
            //定義基類構造函數和屬性
            function BaseClass(name,age){
                this.name=name;
                this.age=age;
            }
            
            //在基類原型上添加sayName方法
            BaseClass.prototype.sayName=function(){
                console.log(this.name);
            }
            
            //定義子類構造函數和屬性
            function SubClass(name,age,job){
                //在子類中構造父類的屬性,此行執行完成後,子類中就有了父類中的全部屬性。
                BaseClass.apply(this,arguments);
                
                //定義子類的屬性
                this.job=job;
            }
            
            //經過將基類的原型賦值給子類的原型,實現子類繼承父類中的方法
            inheritPrototype(SubClass,BaseClass);
            
            //定義子類的方法
            SubClass.prototype.sayJob=function(){
                console.log(this.job);
            }
            
            //寄生組合式繼承
            function inheritPrototype(subClass,baseClass){
                //先建立一個基類原型副本
                function fun(){};
                fun.prototype=baseClass.prototype;//基類原型中定義了基類的方法
                
                //再將具備基類原型的新實例賦給子類原型,這樣子類就繼承了父類中的方法
                var obj=new fun();
                obj.constructor=SubClass
                SubClass.prototype=obj;
                
                /**
                 * backbone中extend 部分源碼
                 * 
                 * var Surrogate=function(){this.constructor=child;}
                 * Surrogate.prototype=parent.prototype;
                 * child.prototype=new Surrogate;
                 * 
                 */
            }
         
          var subClass=    new SubClass('張三',18,'Coder');
         
          console.log(subClass);
          subClass.sayName();
          subClass.sayJob();
        </script>

相關文章
相關標籤/搜索