混合继承是指把多种继承方法结合在一起使用,从而发挥各自优势,扬长避短,以实现各种复杂的应用。其中最常见的形式是把类继承与原型继承混合使用,以解决类继承中存在的问题。下面比较一下类继承、原型继承、实例继承、复制继承和克隆继承之间的不同,见表4.1。
类继承与原型继承是两种截然不同的继承模式,它们生成的对象的行为方式也是不同的。面向对象的开发人员对于类继承比较熟悉,几乎所有使用面向对象的JavaScript应用都用到了这种继承模式,但是,因为JavaScript中的类继承仅仅是对真正基于类继承的一种模仿,所以深入理解JavaScript的开发人员应该懂得原型继承的工作机制。
原型继承更能节约内存。原型链读取成员的方式使得所有克隆出来的对象都共享一个实例,只有在直接设置了某个克隆出来的对象的属性和方法时,情况才会有所变化。而在类继承方式中,创建的每一个对象在内存中都有自己的一套属性和方法副本。原型继承比类继承显得更为简单。
function A(x,y){//构造函数A
this.x=x;
this.y=y;
}
A.prototype.add=function{
return this.x+this.y;
}
function B(x,y){
A.call(this,x,y);//类继承实现
}
B.prototype=new A;//原型继承实现
var b=new B(10,20);
alert(b.x);//10
alert(b.y);//20
alert(b.add);//30
上面的示例把原型继承和类继承混用在一起,从而实现了一种比较完善的继承机制。