一、TypeScript中的类

  • ts中通过 class 来定义类

1、ts中定义类
  1. class Person {
  2. // 属性,前面省略了public关键词
  3. name: string; age: number; height: number;
  4. constructor(name: string, age: number, height: number) { // 构造器函数,实例化类的时候触发的方法
  5. this.name = name;
  6. this.age = age;
  7. this.height = height;
  8. }
  9. getData(): string {
  10. return `${this.name}-${this.age}-${this.height}`;
  11. }
  12. setName(name: string): void {
  13. this.name = name;
  14. }
  15. }
  16. var p = new Person('张三', 20, 18);
  17. console.log(p.getData()); // 输出张三-20-18
  18. p.setName('李四');
  19. console.log(p.getData()); // 输出李四-20-18

2、ts中实现继承
  • 主要使用extends、super这两个关键字来实现 ```typescript // 父类 class Person { name: string; constructor(name: string) {
      this.name = name;
    
    } run(): string {
      return `${this.name}在运动`
    
    } }

// 子类、extends 继承 class Web extends Person { constructor(name: string) { super(name); // 初始化父类的构造函数 } } var w = new Web(‘李四’); console.log(w.run());


<a name="8389837c"></a>
##### 3、ts中继承的探讨,父类的方法和子类的方法一致

- 子类调用方法先到子类中去找,然后再去父类中,如果都有同一方法,子类优先
```typescript
class Person {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    run(): string {
        return `${this.name}在运动`
    }
}
class Web extends Person {
    constructor(name: string) {
        super(name);  // 初始化父类的构造函数
    }
    run(): string {
        return `${this.name}在运动-子类`
    }
    work() {
        console.log(`${this.name}在工作`)
    }
}
var w = new Web('李四');
console.log(w.run()); // 输出李四在运动-子类

4、类里面的修饰符
  • ts里面定义属性的时候给我们提供了三种修饰符

    public:公有,在当前类里面、子类、类外面都可以访问
    protected:保护类型,在当前类里面、子类里面可以访问,在类外部没法访问
    private:私有,在当前类里面可以访问,子类、类外部都没法访问属性如果不加修饰符 默认就是公有(public)
    属性如果不加修饰符默认就是公有(public)
    
  • public:公有,在类里面、子类、类外面都可以访问 ```typescript class Person { public name: string; // 公有属性 constructor(name: string) {

      this.name = name;
    

    } run(): string {

      return `${this.name}在运动`
    

    } } class Web extends Person { constructor(name: string) {

      super(name);  // 初始化父类的构造函数
    

    } run(): string {

      return `${this.name}在运动-子类`
    

    } work() {

      console.log(`${this.name}在工作`)
    

    } } var w = new Web(‘李四’); w.work();

// 在类外部访问公有属性 class Person { public name: string; constructor(name: string) { this.name = name; } run(): string { return ${this.name}在运动 } } var p = new Person(‘哈哈哈’); console.log(p.name); // 输出哈哈哈


- protected:保护类型,在类里面、子类里面可以访问,在类外部没法访问
```typescript
class Person {
    protected name: string; // 保护类型
    constructor(name: string) {
        this.name = name;
    }
    run(): string {
        return `${this.name}在运动`
    }
}
var p = new Person('王五');
console.log(p.run()); // 类里面可以访问
console.log(p.name); // 在类外部没法访问保护类型的数据
  • 私有,在当前类里面可以访问,子类、类外部都没法访问
    class Person {
      private name: string; // 私有属性
      constructor(name: string) {
          this.name = name;
      }
      run(): string {
          return `${this.name}在运动`
      }
    }
    class Web extends Person {
      constructor(name: string) {
          super(name)
      }
      work() {
          console.log(`${this.name}在工作`) // 私有属性在子类中无法访问
      }
    }
    var p = new Person('哈哈哈');
    console.log(p.name); // 在外部不能访问