typescript 类写constructor和不写constructor有什么区别?如果子类没有构造函数父类有构造函数,是直接执行父类的构造方法吗?
首先,“不写constructor
不代表没有constructor
”,例如:
class Test {
}
其实就是:
class Test {
constructor() { }//无实现内容而已
}
其次,如果父类有构造器,而子类没有,会引出两种情况:
第一种,父类构造器有参数,譬如:
class Test {
constructor(public name: string) { }
}
而子类不写构造器,如:
class SubTest extends Test {
}
你可以试试,当你实例化SubTest
时会直接报错的。因为父类仅提供了一个构造器,而且是有参构造器,而你的子类居然没实现相同签名的构造器,肯定不对!
感谢@assassin_cike 提醒,这里报错不是一定的,如果实例化子类时给了参数,那就不报错了,如:new SubTest('hello');
。当然,实际报错的原因也是因为子类自动调用父类的构造器,但签名对不上(参数没传)而引起的
第二种情况,父类的构造器无参,子类不写构造器的话,如下:
class Test {
constructor() {
console.log('here is TEST')
}
}
class SubTest extends Test {}
按照现在typescript
的转义实现来看,确实自动帮你在子类里call
了父类的构造器。
对啊,直接使用父类的构造函数