Javascript中3种实现继承的方法和代码实例(2)
代码示例伺候:
var classA = function(){
this.name = 'DK';
this.alertName = function(){
alert(this.name);
}
}
var classB = function(name,age){
this.name = name;
this.age = age;
}
classB.prototype = new classA();
classB.prototype.alertAge = function(){
alert(this.age);
}
注意这里的父类的构造函数需要确保没有参数。因为即使有构造参数在实现原型继承的时候你也无法传递=.=!
三、混合继承
顾名思义,混合继承就是前两种方式的混合使用了。
var classA = function(name){
this.name = name;
}
classA.prototype.alertName = function(){
alert(this.name);
}
var classB = function(name,age){
classA.call(this,name);
this.age = age;
}
classB.prototype = new classA();
classB.prototype.alertAge = function(){
alert(this.age);
}
使用对象冒充实现了向父类传递参数,同时使用原型继承实现了对公有方法的继承。
说完了这三中继承方式了,下面该说到问题的时候了。
你可能会不解,为什么有了对象冒充,有了原型继承还要再弄出个什么混合继承,对,最重要的也就是这个问题。
1.如果你实际测试一下,你会发现通过对象冒充的方式实现的继承,子类是无法访问到父类的原型链上的方法的。
2.而用原型继承,则会把所有的属性变成共享的属性,如果你同一个子类实现两个实例,你会发现你的所有实例共享所有的属性。
3.但是这肯定是不合适的了。所以就有了混合继承的方式,让属性继续保持私有,同时让子类能够访问父类的原型链的方法。
你可以亲自动手试一下,在对象冒充继承的时候,子类无法访问父类的原型链方法,原型链继承子类的所有实例共享所有父类属性。这里我就不写例子了。