基于原型链的继承

这里写图片描述

//在使用原型链进行继承一定要注意下面问题
    //问题1.不能再设定原型链之后,再重新为原型链赋值
    //问题2.一定要在原型链之后才能添加或者赋值

    //使用原型链继承时,缺陷一:无法在子类中调用父类的构造方法
    //缺陷二:如果父类中有引用类型,此时这个引用添加到子类的原型中
    //当第一个修改后第二个也会被修改
        function Parent(){
            this.pv = "parent";
            this.color = ["red", "blue"];
        }
        Parent.prototype.showParent = function(){
            alert(this.pv);
        }
        function Child(){
            this.cv = "child";
        }
//      问题2演示:
//      Child.prototype.showChild = function(){
//          alert(this.cv);
//      }
//      当使用以上方法,如果进行赋值之后才进行原型链的设定,这样赋值的原型对象就会被重写,
//      赋值的对象就不存在新的原型中
        //让child原型链指向Parent对象,也就等于完成了继承
        Child.prototype = new Parent();
        Child.prototype.showChild = function(){
            alert(this.cv);
        }
        //覆盖父类的方法
        Child.prototype.showParent = function(){
            alert("over parent");
        }
        //问题一演示
        //Child.prototype = function(){
//          alert(this.cv);
//      }
        //当使用以上方法时等于又重写了Child原型,这样就不存在任何继承关系了

        var c1 = new Child();
        c1.color.push("black");
        alert(c1.color);
        c1.showParent();
        c1.showChild();
        var c2 = new Child();
        alert(c2.color);//缺陷二在这里体现,这里不应该出现新添加的black
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值