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

2018-11-16  本文已影响0人  杀鸡也得用牛刀

试验环境: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'
    }
} 

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

上一篇 下一篇

猜你喜欢

热点阅读