TS的类(同ES6)
class Person {
name: string
constructor (name: string) {
this.name = name
}
run(): void {
alert(`${this.name}在运动`)
}
getName(): string {
return this.name
}
setName(name: string): void {
this.name = name
}
}
let p = new Person('范闲')
p.run() // 范闲在运动
p.setName('司理理')
alert(p.getName()) // 司理理
TS继承
class Person {
name: string
constructor (name: string) {
this.name = name
}
run(): void {
alert(`${this.name}在运动`)
}
getName(): string {
return this.name
}
setName(name: string): void {
this.name = name
}
}
class Worker extends Person {
constructor (name: string) {
super(name) // super关键字用于访问父对象上的函数或者属性 super(name)会调用生成一个对象,作为context来调用父类的constructor,然后返回父类的this做为子类的constructor的context继续使用,super改变上下文的this,但是并不会影响父类中的上下文this
}
}
let w = new Worker('林婉儿')
w.run() // 林婉儿在运动
TS属性修饰符(public, protected, private)
class Person {
public name: string // 外部访问,继承子类访问,类中访问都可以
protected age: number // 继承子类访问,类中访问都可以
private address: string // 仅可以在类中访问
constructor (name: string) {
this.name = name
}
}
静态方法
class Person {
name: string
static age: number = 30 // 静态属性
constructor (name: string) {
this.name = name
}
run(): void { // 实例方法
alert(this.name)
}
static work(): void { // 静态方法
alert('工作') // 正确执行
// alert(`${this.name}开始工作`) // 错误,静态方法只能调用静态属性,非静态属性无法调用
alert(`我的年龄是${Person.age}`)
}
}
Person.work() // 静态方法调用
let p = new Person('海棠朵朵')
p.run() // 实例方法使用
// 静态方法无法调用类里面的非静态属性
alert(Person.age)
多态
多态也是继承,指的是,父类创建一些方法但是不实现,由继承的子类去实现这些方法
class Animal {
name: string
constructor (name: string) {
this.name = name
}
eat () { // 父类规定一个方法,但是具体实现让继承的子类去实现
console.log('吃')
}
}
class Dog extends Animal{
constructor (name: string) {
super(name)
}
eat () { // 多态的表现 狗类实现Eat的独特性
return `${this.name}吃狗粮`
}
}
class Cat extends Animal{
constructor (name: string) {
super(name)
}
eat () { // 多态的表现 猫类实现Eat的独特性
return `${this.name}吃猫粮`
}
}
抽象方法
一般用作定义类型的标准
抽象方法仅仅只提供其他类实现的基类,不能被实现,*** abstract ***定义了抽象类与抽象方法,抽象方法只能出现在抽象类中,且抽象类中必须包含至少一个抽象方法
abstract class Desk {
abstract leg (): void;
}