TypeScript 中的类与对象
·
在 TypeScript 中,类(Class) 是面向对象编程的核心,它是创建对象的模板,封装了属性与方法,让代码更具模块化、可复用性。本文将带你系统掌握 TS 类的核心知识点:类属性、构造函数、普通方法、访问修饰符、继承、抽象类与抽象方法,所有示例代码严格遵循规范编码格式。
一、类的基础:属性与构造函数
类是对象的抽象,我们通过class关键字定义类,用构造函数初始化对象属性,这是创建类的基础写法。
class Person {
// 类属性定义
NAME: string;
AGE: number;
// 构造函数:初始化对象
constructor(name: string, age: number) {
this.NAME = name;
this.AGE = age;
}
// 普通方法
show_info(): void {
console.log("姓名:" + this.NAME + ",年龄:" + this.AGE);
}
}
// 创建对象
const PERSON_OBJ = new Person("张三", 20);
PERSON_OBJ.show_info();
核心说明
- 类属性直接声明在类内部,用于存储对象状态。
- 构造函数
constructor在创建对象时自动执行,完成属性初始化。 - 方法用于定义对象行为,通过对象调用执行。
二、类的访问修饰符
TypeScript 提供访问修饰符,控制类中属性和方法的访问权限,提升代码安全性。
常用修饰符
- public:公共权限,默认值,类内外均可访问。
- private:私有权限,仅当前类内部可访问。
- protected:受保护权限,当前类与子类可访问,外部无法访问。
- readonly:只读属性,初始化后不可修改。
class Student {
// 公共属性
public STU_ID: string;
// 私有属性
private GRADE: string;
// 只读属性
public readonly SCHOOL: string = "第一中学";
constructor(stu_id: string, grade: string) {
this.STU_ID = stu_id;
this.GRADE = grade;
}
// 公共方法
public show_stu(): void {
// 类内可访问私有属性
console.log("学号:" + this.STU_ID + ",年级:" + this.GRADE);
}
// 私有方法
private check_grade(): boolean {
return this.GRADE.length > 0;
}
}
const STU_OBJ = new Student("S1001", "高一");
STU_OBJ.show_stu();
// 外部无法访问私有属性
// console.log(STU_OBJ.GRADE); 报错
// 只读属性不可修改
// STU_OBJ.SCHOOL = "第二中学"; 报错
三、类的继承
继承是面向对象的重要特性,通过extends关键字,子类可复用父类的属性与方法,还能扩展自身功能。
// 父类
class Animal {
public TYPE: string;
constructor(type: string) {
this.TYPE = type;
}
public eat(): void {
console.log(this.TYPE + "在进食");
}
}
// 子类继承父类
class Dog extends Animal {
public BARK: string;
constructor(type: string, bark: string) {
// 调用父类构造函数
super(type);
this.BARK = bark;
}
// 子类独有方法
public sound(): void {
console.log(this.TYPE + ":" + this.BARK);
}
// 重写父类方法
public eat(): void {
console.log(this.TYPE + "吃骨头");
}
}
const DOG_OBJ = new Dog("小狗", "汪汪汪");
DOG_OBJ.eat();
DOG_OBJ.sound();
继承核心点
- 子类用
super()调用父类构造函数,必须在构造函数第一行。 - 子类可重写父类方法,覆盖原有逻辑。
- 子类可访问父类
public和protected成员。
四、抽象类与抽象方法
抽象类使用abstract关键字定义,不能直接创建对象,只能被继承。抽象方法只有声明,没有实现,必须由子类重写。
// 抽象类
abstract class Shape {
// 抽象方法:无具体实现
public abstract get_area(): number;
// 普通方法
public show_shape(): void {
console.log("这是一个图形");
}
}
// 子类继承抽象类,必须实现抽象方法
class Circle extends Shape {
public RADIUS: number;
constructor(radius: number) {
super();
this.RADIUS = radius;
}
// 实现抽象方法
public get_area(): number {
return 3.14 * this.RADIUS * this.RADIUS;
}
}
// 子类继承抽象类
class Rectangle extends Shape {
public WIDTH: number;
public HEIGHT: number;
constructor(width: number, height: number) {
super();
this.WIDTH = width;
this.HEIGHT = height;
}
// 实现抽象方法
public get_area(): number {
return this.WIDTH * this.HEIGHT;
}
}
const CIRCLE_OBJ = new Circle(5);
console.log("圆形面积:" + CIRCLE_OBJ.get_area());
const RECT_OBJ = new Rectangle(4, 6);
console.log("矩形面积:" + RECT_OBJ.get_area());
抽象类规则
- 包含抽象方法的类,必须是抽象类。
- 抽象方法不能有方法体,结尾用分号。
- 子类必须实现所有抽象方法,否则子类也需声明为抽象类。
五、静态属性与静态方法
使用static定义静态成员,属于类本身,不属于单个对象,直接通过类名访问。
class Math_tool {
// 静态常量属性
public static readonly PI: number = 3.14159;
// 静态方法
public static add(num1: number, num2: number): number {
return num1 + num2;
}
}
// 直接通过类名访问静态成员
console.log("圆周率:" + Math_tool.PI);
console.log("求和结果:" + Math_tool.add(10, 20));
六、总结
TypeScript 类与对象是前端工程化开发的基础,掌握以下核心点即可灵活运用:
- 类封装属性与方法,构造函数完成初始化。
- 修饰符控制访问权限,保护代码安全。
- 继承实现代码复用,子类可扩展与重写。
- 抽象类定义规范,子类强制实现逻辑。
- 静态成员属于类,无需创建对象即可调用。
更多推荐


所有评论(0)