JS继承方式总结

84 阅读1分钟
  1. 原型链继承
    就是让子类的构造函数指向父类的实例对象,注意指向的这个实例对象不可再使用。这种方式的坏处是每个实例之间基本数据类型不会共享,但是引用数据类型会共享,类似浅拷贝,暂时不知道为什么。
  2. 类的继承
    使用extends关键字实现类的继承,在子类构造函数调用super使用父类的构造函数。
  3. 构造继承
    在子类构造函数中调用父类构造函数,并改变父类的构造函数的this指向为子类实例对象,即通过apply,call调用父类构造函数。注意,这种方法只是通过父类构造函数初始化,无法继承原型链上的属性,当然,它的好处就是不用共享父类属性。
  4. 组合继承(原型链加构造)
    首先使用构造继承,使得属性之间不会共享;然后使用原型链继承,不过因为子类构造函数指向父类实例,所以需要修复constructor指向(不过不修复好像不影响使用)。
  5. 寄生组合继承
    这个主要思路就是不使用SubType.prototype = new SuperType(),然后再用子类构造函数内调用的父类构造函数进行覆盖,而是直接SubType.prototype = Object.create(SuperType.prototype),相当于继承了原型链上的方法,但是不继承属性,属性通过子类构造函数内调用父类构造函数来实现创建自己的属性。
  6. 原型式继承,思路就是把子类原型设置为父类原型。