Skip to content
Netflix - 每月低至 25 元

第4章 类

类的定义

ts
class Person {
  name: string;
  age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}

修饰符

public

  • 默认情况下属性是 public (公开的),即可以在类的内部与外部修改和访问
  • 不明确设置修饰符即为public
ts
class Person {
  name: string;
  age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}
const lbviic = new Person('lbviic', 18);
lbviic.name;	// 可以在外部访问

protected

  • protected 修饰符指受保护的,只允许在父类与子类使用,不允许在类的外部使用
ts
class Person {
  protected name: string;
  age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}
const lbviic = new Person('lbviic', 18);
lbviic.name;	// 无法访问

private

  • private 修饰符指私有的,不允许在子类与类的外部使用
  • 父类声明 private 属性或方法子类不允许覆盖
ts
class Person {
  private name: string;
  age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
}
const lbviic = new Person('lbviic', 18);
lbviic.name;	// 无法访问

readonly

  • readonly 将属性定义为只读,不允许在类的内部与外部进行修改
ts
class Person {
  readonly name: string;
  age: number;
  // 在构造函数初始化时,可以修改
  constructor(name: string = 'lbviic', age: number) {
    this.name = name;
    this.age = age;
  }
}

static

  • static 用于定义静态属性或方法,属性或方法是属于构造函数的
ts
// 通过 static 来实现单例模式
class Person {
  static instance: Person | null = null;
  protected constructor() {}
  static create(): Person {
    // 若已经创建,则不再创建
    if (this.instance == null) {
      this.instance = new Person();
    }
    return this.instance;
  }
}
const lbviic = new Person(); // 构造函数为 protected 无法直接实例化
const lbviic = Person.create(); //通过调用 create 方法实例化对象

get/set

  • 可以通过 get/set 来获取设置为 private 的值
ts
class Person {
  private _name: string;
  age: number;
  constructor(name: string, age: number) {
    this._name = name;
    this.age = age;
  }
  get name() {
    return this._name;
  }
  set name(name: string) {
    this._name = name;
  }
}
const lbviic = new Person('lbviic', 18);
lbviic.name; // 通过 get name() 获取到 _name的值
lbviic.name = 'zhichao'; // 通过 set name() 修改 _name的值

abstract

  • 抽象类定义使用abstract 关键字,抽象类除了具有普通类的功能外,还可以定义抽象方法
  • 抽象类可以不包含抽象方法,但抽象方法必须存在于抽象类中
  • 抽象方法是对方法的定义,子类必须实现这个方法
  • 抽象类不可以直接使用,只能被继承
  • 抽象类类似于类的模板,实现规范的代码定义
ts
abstract class Animal {
  abstract run(): void
}
class Dog extends Animal {
  // 必须实现 run 方法
  run() {
    console.log("狗在跑");
  }
}
关注微信公众号搬瓦工 - 美国 CN2 优化线路
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0

预览:

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3