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