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

typescript 类写constructor和不写constructor有什么区别?如果子类没有构造函数父类有构造函数,是直接执行父类的构造方法吗?

阅读 15.8k
2 个回答

首先,“不写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了父类的构造器。

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

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进