源代码:
<script>
class Father {
constructor() {
}
say() {
console.log('this is father');
}
}
class Son extends Father {
constructor() {
}
say() {
console.log('this is son');
}
}
var son = new Son()
son.say()
</script>
报错:
欧陆词典翻译:
ReferenceError:必须在派生类中调用超级构造函数,
然后才能访问“ this”或从派生构造函数返回
解释:
1.在通过new关键字创建对象时,会通过构造函数return一个实例对象。
2.此时若父类和子类均含有构造函数,则根据就近原则,会直接调用子类的构造函数。
此时就会报错了,因为根据继承的原则,在子类构造函数返回前,必须调用super父类构造函数。
解决:
在子类构造函数中调用super()
<script>
class Father {
constructor() {
}
say() {
console.log('this is father');
}
}
class Son extends Father {
constructor() {
super()
}
say() {
console.log('this is son');
}
}
var son = new Son()
son.say()
</script>
输出: