基于原型链实现继承
function Parent(){
this.pv = "parent";
}
Parent.prototype.showParentValue = function(){
alert(this.pv);
}
function Child(){
this.cv = "child";
}
<!-- B-->
Child.prototype = new Parent(); //1:让child的原型链指向parent对象。也就等于完成了一次继承 2: 不会在指向之前的对象原型,而是会指向 new 之后的对象 _prop_对象空间 。这个_prop_又指向parent的对象原型
Child.prototype.showChildValue = function(){
alert(this.cv);
}
<-- A-->
var c = new Child();
c.showChildValue();
c.showParentValue();
需要注意的是 1:不得在重新为原型链赋值。例如在上文
A处 在定义 Child.prototype = {
showChildValue :function(){
alert(this.v);
}
}
一旦这样定义之后,就又重写了对象原型。这样就不存在继承关系了;
2:一定不能在设置原型链之前赋值 例如在上文B处。
Child.prototype.showChildValue = function(){
alert(this.cv);
}加入这行代码。这个时候当我们调用Child的方法的时候就会报错。该方法不是一个函数。
总结:原型链的缺点 1:使用原型链继承,最大的缺点是无法在子类中调用父类的构造。这样就无法修改父类的值
2:如果父类中有引用类型,这个时候这个引用会添加到子类的原型中,当第一个对象修改了这个引用之后,其他的对象的引用同时修改。
浙公网安备 33010602011771号