Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第5章:类与面向对象编程

第5章:类与面向对象编程

构造函数与属性初始化

1. 构造函数的基本概念

在 TypeScript 中,构造函数(constructor)是类的特殊方法,用于在创建类的实例时初始化对象。构造函数会在使用 new 关键字实例化类时自动调用。

class Person {
  name: string;
  age: number;

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

const person = new Person("Alice", 30);

2. 构造函数的参数属性

TypeScript 提供了一种简化的语法,允许直接在构造函数参数中声明和初始化属性,称为参数属性。通过在参数前添加访问修饰符(public、private、protected),可以省略手动赋值。

class Person {
  constructor(public name: string, public age: number) {}
}

// 等价于:
class Person {
  name: string;
  age: number;

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

3. 属性初始化方式

类的属性可以通过以下方式初始化:

  • 构造函数初始化:在构造函数中赋值(如上例)。
  • 默认值初始化:直接在属性声明时赋值。
  • 延迟初始化:使用 ! 断言(明确告诉 TypeScript 属性会在稍后初始化)。
class Example {
  // 默认值初始化
  count: number = 0;

  // 延迟初始化
  message!: string;

  constructor() {
    this.message = "Hello"; // 实际初始化
  }
}

4. 静态属性与实例属性

  • 实例属性:属于类的每个实例,通过 this 访问。
  • 静态属性:属于类本身,通过类名访问,用 static 关键字声明。
class Circle {
  static PI: number = 3.14; // 静态属性
  radius: number;          // 实例属性

  constructor(radius: number) {
    this.radius = radius;
  }

  getArea(): number {
    return Circle.PI * this.radius ** 2;
  }
}

console.log(Circle.PI); // 3.14
const circle = new Circle(5);
console.log(circle.getArea()); // 78.5

5. 初始化顺序

类属性的初始化顺序如下:

  1. 静态属性(如果未显式初始化,则为 undefined)。
  2. 实例属性(按声明顺序初始化默认值)。
  3. 构造函数中的赋值。
class InitOrder {
  static staticField = console.log("1. Static field");
  instanceField = console.log("2. Instance field");

  constructor() {
    console.log("3. Constructor");
  }
}

new InitOrder();
// 输出顺序:
// 1. Static field
// 2. Instance field
// 3. Constructor

6. 实际应用建议

  • 优先使用参数属性简化代码。
  • 避免滥用 ! 断言,确保属性确实会被初始化。
  • 对于可选属性,可以使用 ? 或联合类型(如 string | undefined)。
class User {
  constructor(
    public id: string,
    public name: string,
    public age?: number // 可选属性
  ) {}
}
Last Updated:: 3/27/25, 10:50 AM