基于原型链实现继承

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:如果父类中有引用类型,这个时候这个引用会添加到子类的原型中,当第一个对象修改了这个引用之后,其他的对象的引用同时修改。

 

 

posted on 2013-07-02 11:19  菜鸟半只  阅读(164)  评论(0)    收藏  举报

导航