Skip to content

ES6 Class 继承模拟

让我们来实现一下构造函数的继承吧~ 😄

一、ES5 原型继承 + 构造继承

代码

JavaScript
function 爷爷() {
  this.a = 1
}
爷爷.prototype.say = function () {
  console.info(this.a, this.b, this.c)
}

function 爸爸() {
  this.b = 2
}

function 儿子() {
  爷爷.call(this)
  爸爸.call(this)
  this.c = 3
}

爸爸.prototype = Object.create(爷爷.prototype)
// 重新指定constructor
爸爸.prototype.constructor = 爸爸

儿子.prototype = Object.create(爸爸.prototype)
// 重新指定constructor
儿子.prototype.constructor = 儿子

结果

JavaScript
let obj = new 儿子()
obj.say()
console.info(obj)
  • 1 2 3
  • 儿子 { a: 1, b: 2, c: 3 }

二、ES6class 继承(本质还是 ES5 的原型继承 + 构造继承)

代码

JavaScript
class 爷爷 {
  constructor() {
    this.a = 1
  }

}
class 爸爸 extends 爷爷 {
  constructor() {
    super()
    this.b = 2
  }

  say() {
    console.info(this.a, this.b, this.c)
  }
}
class 儿子 extends 爸爸 {
  constructor() {
    super()
    this.c = arguments[0]
  }
}

结果

JavaScript
let obj = new 儿子()
obj.say()
console.info(obj)
  • 1 2 123
  • 儿子 { a: 1, b: 2, c: 123 }