JavaScript寄生组合式继承特点:
避免了在子类prototype上创建不必要多余的属性,相比直接继承基类的实例效率要高。
是JavaScript 实现继承的最有效方式。
<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>