实例:组合继承及问题

组合继承(原型链+借用构造函数,又叫伪经典继承)— 最常用的继承方法

基本思想:红宝书上这样说,其思路是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承,这样,即通过在原型上定义方法实现了函数复用,又能保证每个实例都有自己的属性。

优点:在原型上定义方法是实现了函数复用,又能够保证每个实例都有它自己的属性。

缺点:两次调用超类型构造函数。组合继承最大的问题就是无论什么情况下,都会调用两次超类型构造函数:一次是在创建子类型原型的时候,另一次是在子类型构造函数内部。虽然子类型最终会包含超类型对象的全部实例属性,但我们不得不在调用子类型构造函数时重写这些属性。

虽然有缺点,但是组合继承仍然是开发中最常用的继承方式

实例解析:

function Friend(name,age){
    this.name = name;
    this.age = age;
}

Friend.prototype.showName = function(){
    console.log(this.name);
}

function GirlFriend(name,age){
    //继承属性 第一次调用超类型构造函数
    Friend.call(this,name,age);
    this.city = "青岛";
}

//继承方法第二次调用超类型构造函数;此外,这种写法改变了构造函数的指向
GirlFriend.prototype = new Friend();
//修复构造函数指向
GirlFriend.prototype.constuctor = GirlFriend;

GirlFriend.prototype.showCity = function(){
    console.log(this.city);
}

var p1 = new GirlFriend("韩年",24);
console.log(p1);
p1.showName();
p1.showCity();

var p2 = new GirlFriend("佟丽",20);
console.log(p2);
p2.showName();
p2.showCity();

控制台输出:

p2.showName();
p2.showCity();


控制台输出:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WUBMUIsV-1604910970645)(C:\Users\yingl\AppData\Roaming\Typora\typora-user-images\image-20201109140822990.png)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值