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章:类与面向对象编程

访问修饰符(public, private, protected)

在 TypeScript 中,访问修饰符用于控制类成员(属性和方法)的可访问性。它们帮助开发者实现封装原则,明确哪些成员可以被外部访问,哪些仅限内部使用。TypeScript 提供了三种主要的访问修饰符:public、private 和 protected。

1. public(默认修饰符)

  • 作用:成员可以在任何地方被访问,包括类内部、子类以及类实例。
  • 特点:
    • 如果未显式指定修饰符,默认为 public。
    • 通常用于公开的 API 或需要外部直接访问的成员。
  • 示例:
    class Person {
      public name: string; // 显式声明为 public(可省略)
      constructor(name: string) {
        this.name = name;
      }
    }
    const person = new Person("Alice");
    console.log(person.name); // 允许访问
    

2. private

  • 作用:成员仅能在定义它的类内部访问,子类和实例均无法访问。
  • 特点:
    • 强制封装,避免外部直接修改敏感数据。
    • 编译后会通过 WeakMap 实现(ES5 及以上目标)。
  • 示例:
    class BankAccount {
      private balance: number;
      constructor(initialBalance: number) {
        this.balance = initialBalance;
      }
      public deposit(amount: number) {
        this.balance += amount; // 类内部可访问
      }
    }
    const account = new BankAccount(1000);
    console.log(account.balance); // 编译错误:Property 'balance' is private
    

3. protected

  • 作用:成员可在类内部和子类中访问,但实例无法直接访问。
  • 特点:
    • 适用于需要被子类继承但对外隐藏的成员。
    • 常用于基类的工具方法或受保护的状态。
  • 示例:
    class Animal {
      protected age: number;
      constructor(age: number) {
        this.age = age;
      }
    }
    class Dog extends Animal {
      public getAge() {
        return this.age; // 子类可访问
      }
    }
    const dog = new Dog(3);
    console.log(dog.age); // 编译错误:Property 'age' is protected
    console.log(dog.getAge()); // 允许通过公开方法访问
    

对比总结

修饰符类内部子类实例
public✔✔✔
protected✔✔✖
private✔✖✖

注意事项

  1. 编译时的限制:访问修饰符仅在 TypeScript 编译阶段生效,编译后的 JavaScript 代码中不会保留这些限制。
  2. 兼容性:若目标为 ES3 或 ES5,private 和 protected 会降级为普通属性,但编译器仍会检查访问权限。
  3. 替代方案:ECMAScript 的私有字段语法(#field)是 JavaScript 原生私有成员方案,与 TypeScript 的 private 修饰符共存但互不冲突。

最佳实践

  • 优先使用 private 或 protected 保护内部状态,避免直接暴露属性。
  • 通过公开方法(如 getter/setter)控制对私有成员的访问,便于后续扩展验证逻辑。
Last Updated:: 3/27/25, 10:50 AM