首先,“不写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了父类的构造器。
首先,“不写
constructor
不代表没有constructor
”,例如:其实就是:
其次,如果父类有构造器,而子类没有,会引出两种情况:
第一种,父类构造器有参数,譬如:
而子类不写构造器,如:
你可以试试,当你实例化
SubTest
时会直接报错的。因为父类仅提供了一个构造器,而且是有参构造器,而你的子类居然没实现相同签名的构造器,肯定不对!感谢@assassin_cike 提醒,这里报错不是一定的,如果实例化子类时给了参数,那就不报错了,如:
new SubTest('hello');
。当然,实际报错的原因也是因为子类自动调用父类的构造器,但签名对不上(参数没传)而引起的第二种情况,父类的构造器无参,子类不写构造器的话,如下:
按照现在
typescript
的转义实现来看,确实自动帮你在子类里call
了父类的构造器。