JavaScript的三种常见继承方法

JavaScript的继承方法有很多,下面就来梳理讲解一下最常见的三种继承方法:

1.原型链直接继承

如果说B要继承A,则可以

B.protoytpe = A.prototype

B.prototype = new A()

两种方法都是通过直接继承原型的方法来完成继承的。

缺点
1.B构造出得对象无法向A构造函数传参。
2.继承单一。
3.所有B构造出来的对像都会共享A的实例属性。(原型上的属性共享,一个实例区修改原型方法,其余的所有实例原型上的该方法都会被修改)

2.原型间接继承

同样的,B要继承A的话,可以

C.prototype = A.prototype
B.prototype = C.prototype

C.prototype = A.prototype
B.prototype = new C()

两种方法都是通过间接继承原型的方法来完成继承的。

特点:
1.跟上面方法作比较,区别在于,这种方法使B在继承A的原型方法同时,也继承了C的实例方法;而上面只继承了A的实例方法。

3.借助构造函数继承

同样的,B要继承A(或者同时继承C、D时)的话,可以

function B(){
   A.call(this);
   C.call(this);
   D.call(this);
}

这种方法是在B函数体内部,将A的this指向改变。
这样,在B构造对象时,就会执行这行代码,

特点:
1.只继承了A构造函数的属性,没有继承A原型上的属性。
2.可以继承多个构造函数的属性(call多个)。
3.在B构造的对象里可以向A传参。

缺点:
1.只能继承A构造函数的属性,无法继承原型的属性。
2.无法实现构造函数的复用(每次用B构造对象时,都会调用一遍call这行代码。)
3.每个B实例都会有A构造函数的副本。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值