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>