原型链的继承

 原型链的继承就是把父类的一个对象赋给子类的原型,这样就实现了子类对父类的继承。例子如下:

function Parent(){
this.pv="parent";
}
Parent.prototype.say=function(){
alert(this.pv);
}

function Son(){
this.sv="son";
}
Son.prototype=new Parent();
Son.prototype.ssay=function(){
alert(this.sv);
}

var s1=new Son();
alert(s1.pv);

s1.say();

从这里我们可以看出现在的子类已经可以调用父类的属性和方法。如果感觉父类的方法不能满足子类的使用的话,就可以把子类的方法名改成和父类的相同,这个叫做方法的覆盖也叫做重写,但是不是重载,javascript是弱数据语言类型,没有重载。

但是我们上面的写法也有一些缺陷就是无法在子类中调用父类的构造函数,这样也就无法把子类中的属性赋值给父类。所以我们便引入了基于伪装来实现继承。

function Parent(name){
this.name=name;
}
function Son(name,age){
this.age=age;
Parent.call(this,name);
}
var s1=new Son("父级元素",18);
alert(s1.name);

通过以上的方法我们可以发现通过call方法我们可以实现对父类的属性的修改。同样的,如果想修改很多的父级元素里面的属性的话还可以用apply,可以写成                         Parent.apply(this,[name,age]) ,这样可以多个的修改父类的属性。

但是使用这样方法的话也是有缺陷的,就是子类的原型不会指向父类,所以父类中写在原型中的方法不会被子类继承,所以子类调用不到父类的方法。所以接下来就是终极方案,基于组合来进行继承。

function Parent(name){
this.name=name;
this.friends=['老王','老张']
}
Parent.prototype.say=function(){
alert(this.name+this.age+this.friends);
}

function Son(name,age){
this.age=age;
Parent.apply(this,[name,age]);
}
Son.prototype=new Parent();

Son.prototype.ssay=function(){
alert(this.name+this.age);
}

var s1=new Son("小石头",18);
s1.friends.push('老李');
s1.say();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值