TypeScript使用class继承时,实例创建时属性赋值的覆盖问题

试验环境:webpack + ts + babel

在ts中,在使用new语法创建类实例时,有两种方式给实例属性赋值:

class Person {
    // 方式一:直接在属性声明时给个默认值
    firstName: string = 'tom'
    // 普通声明
    lastName: string

    constructor () {
        方式二:在构造器中赋值
        this.firstName = 'nick'
        this.lastName = 'yang'
    }
}

其中,当对同一个属性赋值时,方式二优先级高于方式一。

那么加上继承呢?比如:

class BaseModel {
    firstName: string = 'parent_nick'

   constructor () {
       this.lastName = 'parent_yang'
   }
}

class Person extends BaseModel {
    // 方式一:直接在属性声明时给个默认值
    firstName: string = 'tom'
    // 普通声明
    lastName: string

    constructor () {
        方式二:在构造器中赋值
        this.firstName = 'nick'
        this.lastName = 'yang'
    }
} 

在这种情况下,可以看出一个属性有四种赋值方式。此时的赋值优先级是:子类构造器 > 子类声明预设定(默认值) > 父类构造器 > 父类声明预设定
更长的继承链依次类推。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。