JavaScript 实现继承的方式

73 阅读1分钟

原型链继承

  • 在 object()函数内部,先创建一个临时的构造函数,然后将传入的对象作为这个构造函数的原型,最后返回这个临时类型的一个新实例
Star.prototype = new Person()
Star.prototype.constructor = Star
  • 缺点:只能继承父类的方法

借用构造函数继承

  • 在子类构造函数的内部调用超类型构造函数

  • apply()call()方法在新创建的对象上执行构造函数

Person.call(this,age,name)`
  • 缺点:无法复用,只能继承父类的属性

组合继承(伪经典继承)

  • 将原型链和构造函数组合

  • 用构造函数来实现实例属性的继承

  • 在原型上定义方法实现了函数复用,又能保证每一个实例都有它自己的属性

  • 会有一个小bug,里面的age,name,有两份,有一份的值为undefined,因为里面的apply()call()方法会自动多调用一次

寄生组合继承

  • 用构造函数来继承属性

  • 用原型链的混成形式来继承方法

  • 用寄生式继承来继承超类型的原型,再将结果指定给子类型的原型

Star.prototype = Object.create(Person.prototype)

ES6的Class类继承方式

  • 用class通过extends来继承父类中属性和方法,super指向父类的原型对象

  • 子类constructor方法中必须有super关键字,且必须出现在this之前

链接:juejin.cn/post/712430…