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继承了Animalclass 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:修饰的属性或者方法只能读不能写
