实现继承的几种方式

发布时间:2024年01月21日

原型链继承

父类的实例作为子类的原型

function AA(){ 
}
Woman.prototype= new BB();
Woman.prototype.name = 'CC';
let AAObj = new AA();

优点:

简单易于实现,父类的新增的实例与属性子类都能访问

缺点:

可以在子类中增加实例属性,如果要新增加原型属性和方法需要在new 父类构造函数的后面

无法实现多继承

创建子类实例时,不能向父类构造函数中传参数

?借用构造函数继承(伪造对象、经典继承)

复制父类的实例属性给子类

function AA(name){
 //继承了People
  People.call(this); //People.call(this,'CC'); 
  this.name = name || 'DD'
}
let AAObj = new AA();

?优点:

解决了子类构造函数向父类构造函数中传递参数

可以实现多继承(call或者apply多个父类)

缺点:

方法都在构造函数中定义,无法复用

不能继承原型属性/方法,只能继承父类的实例属性和方法

实例继承(原型式继承)?

function Wonman(name){
  let instance = new People();
  instance.name = name || 'wangxiaoxia';
  return instance;
}
let wonmanObj = new Wonman();

优点:

不限制调用方式

简单,易实现

缺点:不能多次继承

?

?

文章来源:https://blog.csdn.net/weixin_53729216/article/details/135736310
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。