声明类
class ClassName {
public value: number // 实例属性
public getValue ( ): number { // 实例方法
return this.value
}
constructor ( params: number ) {
this.value = params
}
}
const ins = new ClassName(123)
- 构造函数中通过this定义的属性和方法都在实例自身上
- 类中定义的属性会在实例自身上,方法会在原型对象上
- 创建实例时,本质上调用的就是类的构造器函数(constructor)
实例类型
定义的类既是一个值,也是一个类型,实例的类型就是创建它的类
class People {
constructor(public name: string) {}
}
const people = new People('阿坤') // people: People
const clonePeople: People = people
- 实例的类型创建时可以省略
构造器类型
new() => type
const classOne:new() => ClassOne = ClassOne
- 对类的构造方法进行约束,参数与实例类型都符合的类,才能赋值
继承
可以继承其他的类,进行代码的复用,通过 extends
进行继承
class Child extends Parent {
constructor ( params: number ) {
super( params )
}
}
- 如果子类没有定义constructor,那么会直接使用父类的constructor
- 继承后子类的构造函数中会有一个super函数
- super 就是父类的构造函数(constructor)
- 可以传入参数调用,调用后子类会拥有父类的实例属性
- 就是借用构造函数继承实例属性
- 只能继承一个父类
静态成员
即类自身的属性和方法,通过 static
修饰符定义
class Self {
static age: number = 666
static print ():void {
console.log( Self.age )
}
}
- 静态成员无法继承,也无法通过this访问,只能通过类访问
- 能够使用访问修饰符,效果同实例成员
存取器
类的存值函数与取值函数,就是赋值/访问时会调用的函数,同ES6
class ClassName {
private _name: string = '阿坤'
get name() { // 取值器
return this._name
}
set name( value ) { // 存值器
this._name = value
}
}
const ins = new ClassName()
console.log( ins.nameStr )
ins.nameStr = '篮球'
get
定义取值器,set
定义存值器,名称随意- 同名的geter和seter是一个整体,会成为一个实例属性
- 赋值触发seter,访问触发geter