typescritp对类的支持可谓是更加丰富 除了ES6 ES7 已经有的内容还添加了一些新的内容
1、面向对象的基础术语
- 类(class):定义了一切事物的抽象特点
- 对象(Object):类的实例
- 面向对象(oop)的三大特征:封装 继承 多态
// 创建一个类
class Animal { // => 封装
// 定义构造函数
constructor (name) {
this.name = name
}
// 定义方法
run () {
return `${this.name} is running`
}
}
const snake = new Animal('lily')
console.log(snake.run())
// 新定义的Dog继承了Animal
class Dog extends Animal { // => 继承
bark () {
return `$(this.name) is barkimg`
}
}
const xiaobao = new Dog('xiaobao');
console.log (xiaobao.run());
console.log (xiaobao.bark());
class Cat extends Animal { // => 多态
// 创建静态属性 - 可直接调用
static categories = ['mammal']
cosntructor(name) {
super(name) // super 重写构造函数
console.log(this.name)
}
run() {
return 'Meow,' + super.run()
}
}
const maomao = new Cat('maomao')
console.log(maomao.run())
2、TypeScript 中的类
- Public:修饰的属性或方法是共有的
- Private:修饰的属性或方法是私有的
```typescript
// 创建以一个类
class Animal {
// 定义构造函数
constructor(name) {
} // 定义方法 // 使用Private修饰 外部不可访问 private run() {this.name = name
} } const snake = new Animal(‘lily’) // 此时snake.run() 会报错 console.log(snake.run())return `${this.name} is running`
// 继承
class Dog extends Animal {
bark() {
return ${this.name} is barking
}
}
// 此时xiaobao.run() 也会报错
const xiaobao = new Dog(‘xiaobao’)
- Protected:修饰的属性或者方法是受保护的
```typescript
// 创建以一个类
class Animal {
// 定义构造函数
constructor(name) {
this.name = name
}
// 定义方法
// 使用Protected修饰 外部不可访问 但是自己的子类可以访问
protected run() {
return `${this.name} is running`
}
}
const snake = new Animal('lily')
// 此时snake.run() 会报错
console.log(snake.run())
// 继承
class Dog extends Animal {
bark() {
return `${this.name} is barking`
}
}
// 此时xiaobao.run() 不会报错
const siaobao = new Dog('xiaobao')
console.log(xiaobao.run());
console.log(xiaobao.bark());
- readonly:修饰的属性或者方法只能读不能写