史上最为详细的javascript继承(推荐)

  

前言   

为大家分享js中最常见最详细的继承方式,接下来将一下面的几个维度进行展示说明
  文章有点长,请耐心阅读& # 128513;,有什么错误理解的地方希望留言指出来

  
      <李>产生原因李   <李>代码实现李   <李>基本原理李   <李>语言实现李   <李>场景优点李   <李>缺点李   
  

继承方式

  
      <李>原型链继承李   <李>借用构造函数模式继承李   <李>组合继承李   <李>原型式继承李   <李>寄生式继承李   <李>寄生组合李   
  

原型链继承
  相信小伙伴们都知道到原型链继承(ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法),因为原型链继承非常的强大,但是也有它的缺点,接下来咱们就按照上面的维度看看原型链继承到底是什么鬼
  代码实现:(需要两个构造函数来完成一个原型链继承)

     //父型构造函数称为超类   函数的超类型(){   this.name='超级';   this.friend=[];   这一点。财产=true;   }   SuperType.prototype.getName=function () {   返回this.name;   }   SuperType.prototype。getSuperValue=https://www.yisu.com/zixun/function () {   返回this.property;   };//子类型构造函数称为子类   函数亚型(姓名、年龄){   this.name=名称;   this.age=年龄;   这一点。subproperty=false;   }   亚型。原型=new超类型();   SubType.prototype.constrcutor=亚型;   SubType.prototype.getAge=function () {   返回this.age;   }   SubType.prototype。getSubValue=function () {   返回this.subproperty;   };   var孩子=新的亚型(‘闪亮’,12);   console.log (child.getName)//闪亮   console.log (child.getAge ())//12   之前      

图解部分属性

  

史上最为详细的javascript继承(推荐)

  

<>强基本原理

  

使用类似作用域的原型链,进行继承查找

  

<>强语言实现

  

定义两个构造函数,分别为父类(超类型),子类(亚型),为了实现子类能够使用父类的属性(本身和原型上面的属性)。重写子类的原型,让子类的原型指向父类实例,这样子类的构造函数就是父类的实例地址,实现子类可以使用父类的本身和原型上的属性

  

<>强优点

  

子类可以通过原型链的查找,实现父类的属性公用与子类的实例

  

<强>缺点,,

  
      <李>一些引用数据操作的时候会出问题,两个实例会公用继承实例的引用数据类李   <李>谨慎定义方法,以免定义方法也继承对象原型的方法重名李   <李>无法直接给父级构造函数使用参数   
  

借用构造函数模式继承
  虽然原型链继承很强大但是也有他的缺点,借用构造函数继承可以解决原型链继承的缺点,开线面的解释
  代码实现:
  

     //把父类当中一个函数使用   函数的超类型(名字){   this.name=名字   this.friend=[a, b]   }   SuperType.prototype.getFriend=function () {   返回this.firend   }   函数亚型(名字){//执行父类函数   SuperType.call(这名字);   }   var孩子=新的亚型(“的”)   var平安幸福=new亚型(红色的)   console.log (child.name)//闪亮   console.log (childRed.name)//红色   child.firend.push (“c”)   console.log (child.friend)//a, b, c   console.log (childRed.friend)//a, b   console.log (childRed.getFriend)//定义      之前      

<>强基本原理

  

使用电话应用方法,通过执行方法修改这(上下文),是的父级的这个变成子类实例的,这样每个实例都会得到父类的属性,实现引用属性备份

  

<强>使用场景

  

父类中需要一些子类使用共享的引用类型,并且子类可能会操作父类共享的引用类型
  但是父类的非这绑定的属性和方法是不可以使用的(放在父类原型的属性和方法)

  

<>强语言实现

  

不要把父类当中构造函数,当中一个函数来处理这样更容易理解,在子类的构造函数中借用父类函数通过修改这来执行,这样子类的实例包含父类的属性

  

<>强优点

  
      <李>解决了原型链继承的引用类型操作问题

    史上最为详细的javascript继承(推荐)