首页 > typescript 类写constructor和不写constructor有什么区别?

typescript 类写constructor和不写constructor有什么区别?

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了父类的构造器。


对啊,直接使用父类的构造函数

【热门文章】
【热门文章】