欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实例:组合继承及问题

程序员文章站 2022-04-26 17:45:37
...

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

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

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

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

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

实例解析:

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)]
相关标签: 实现继承的方式