聊一聊js的几种继承方式

在js中, 很多地方需要使用到继承, 废话少说, 今天来聊一聊js几种继承方式的优缺点

  • 构造函数继承

    function Parent(){
        let arr=[1,2,3,4]
    }
    
    function Child(){
        Parent.call(this);   // this === Parent1
    }
    
    • 缺点: Parent 上的原型链不能被子类继承
  • 原型链继承

    function Parent(){
        let arr=[1,2,3,4]
    }
    
    function Child(){
        Parent.call(this);   // this === Parent1
    }
    
    Child.prototype = new Parent();
    

    缺点:

    • 如果父类中的属性值改变(例如数组), 所有子类的实例中对应的都会改变
  • 组合继承

      function Parent(){
      let arr=[1,2,3,4]
      }
    
    

    function Child() {
    Parent.call(this);
    }
    Child.protype = new Parent();

    
    

    缺点:

  • 父类的构造函数会被指向两次

  • child = new Child() ;

    child instanceof Child // true

    child instanceof Parent // true

    不能区分实例到底是父类的实例, 还是子类的实例

  • 组合继承的优化(推荐使用这种方式)

    function Parent(){
        let arr=[1,2,3,4]
    }
      
    function Child() {
          Parent.call(this);
    }
    Child.prototype = Object.create(Parent.prototype); // 把显示原型放在子类的显示原型上
    child.prototype.constructor = Child()  // 构造函数等于该函数本身
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章 错误处理: 错误: 程序运行过程中,导致程序无法正常执行的现象(即bug) 现象: 程序一旦出错,默认会报...
    fastwe阅读 1,151评论 0 1
  • 原文链接:zhuanlan.zhihu.com (一) 原型链继承: function Parent(name) ...
    越努力越幸运_952c阅读 303评论 0 2
  • avaScript对每个创建的对象都会设置一个原型,指向它的原型对象。 当我们用obj.xxx访问一个对象的属性时...
    源大侠阅读 269评论 0 1
  • 【体验入】昨晚小宇宙会议,夜里11点多了雪峰老师还在给我们点评,提炼、鼓励所有人。雪峰老师的这种敬畏、这种交给,让...
    Alina_qi阅读 182评论 0 1
  • 1.运送能力的不同 地铁高峰时段单向最大客运量为3-7万人次,轻轨(轨道交通)的高峰时段最大客运量为1-3万人次。...
    莹仔陪你说晚安阅读 5,670评论 0 3