【发布时间】:2017-05-24 22:32:41
【问题描述】:
自从我开始使用 ES6 以来,我一直在使用扩展声明 class ClassB extends ClassA {} 来扩展类,而且最近这是我看到的唯一方法。
前几天在阅读 Yeoman 文档时,我注意到他们正在扩展课程 module.exports = class extends ClassA {}。
我认为这些声明一定只是表达完全相同的事情的不同方式。我测试了以下代码以确认我的怀疑,但它并不像我希望的那样清楚:
class ClassA {
constructor(width) {
this.width = width
}
}
let ClassB = class extends ClassA {
constructor(width, height) {
super(width)
this.height = height
}
}
class ClassC extends ClassA {
constructor(width, height) {
super(width)
this.height = height
}
}
let instanceB = new ClassB(10, 10)
let instanceC = new ClassC(10, 10)
当我在 chrome 中查看演示时,我注意到变量 instanceB 和 instanceC 的构造函数略有不同:
- instanceB: ClassB
- __proto__: ClassA
- constructor: class extends
- instanceC: ClassC
- __proto__: ClassA
- constructor: class ClassC
我的问题是这些扩展声明是否完全相同,即使它们在检查器中的描述略有不同?
【问题讨论】:
-
我建议继续使用类声明。您可以在 ES6 模块中将它们与
export或export default结合使用。
标签: javascript inheritance extends