快速的读懂js继承,看这一个就好了

js继承

JS继承实现方式也很多,主要分ES5和ES6继承的实现
先说一下ES5是如何实现继承的
ES5实现继承主要是基于prototype来实现的

说之前我们先说一下什么是继承 :

通过某种方式可以让一个对象访问另一个对象的属性和方法 这种方式就是继承

敲黑板:实现继承首先要提供一个父类
在这里插入图片描述

原型链继承

利用原型让一个引用类型继承另一个引用类型的属性和方法
优点:简单易于实现
缺点:无法向父函数传参,函数不能复用
B.prototype=new A()

借用构造函数继承(call或者apply的方式继承)

在子类型的构造函数中调用超类型构造函数
优点:可以向父函数传参,解决了实例被共享的问题
缺点:无法复用,不能继承原型属性或方法

function B(name,age) 
{ 
A.call(ths,name,age) 
}

组合继承 组合继承是结合第一种和第二种方式

特点:可以继承父类原型上的属性,可传参可复用。
缺点:调用了两次父类构造函数(耗内存)。

原型式继承

借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。

优点:不限制调用方式
缺点:无法实现复用,实例会被共享

寄生式继承

创建一个仅用于封装继承过程的函数, 该函数在内部以某种方式来增强对象,最后再像真地是它做了所有工作一 样返回对象。
缺点:不能函数复用故效率低下,实例会被共享

寄生组合式继承

即通过借用构造函数来继承属性 ,通过原型链的混成形式来继承方法,通过寄生的方式来修复组合式继承的不足,完美的实现继承
优点:只调用了一次父函数,效率更高。与其同时,原型链还能保持不变。因此寄生组合继承是引用类型最理性的继承范式。

再说一下ES6是如何实现继承的
ES6继承是目前比较新,并且主流的继承方式,用class定义类,用extends继承类,用super()表示父类

例如:创建A类 
class A {
 constructor() { 
 //构造器代码,new时自动执行
  }
  方法1( ) { //A类的方法 } 
  方法2( ) { //A类的方法 } }
  创建B类并继承A类
  class B extends A { 
  constructor() { 
  super() //表示父类
   } 
   }
   实例化B类: var b1=new B( ) 
   • b1.方法1( )

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值