0Pricing
TypeScript Academy · 课时

public、private 与 protected 修饰符

使用修饰符控制对类成员的访问

public、private 与 protected 修饰符 是 CoddyKit 上的免费 TypeScript Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 TypeScript Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 TypeScript Academy 课程共包含 4 节课。

欢迎

TypeScript 访问修饰符控制类成员的可见性。它们有助于实现封装并防止意外使用。

公共:可在任何位置访问

公共成员是默认设置。公共成员可以从任何位置访问——包括类内部、子类和外部代码。
class Car {
  public brand: string;
  constructor(brand: string) { this.brand = brand; }
}
const c = new Car('Toyota');
console.log(c.brand); // OK

私有:仅限类内访问

私有成员只能在声明它们的类内部访问。子类和外部代码无法访问它们。
class BankAccount {
  private balance: number = 0;
  deposit(n: number) { this.balance += n; }
}
const a = new BankAccount();
// a.balance; // Error!

受保护:类与子类可访问

受保护成员可以在声明它们的类及其任何子类中访问,但无法从外部代码访问。
class Animal {
  protected name: string;
  constructor(name: string) { this.name = name; }
}
class Dog extends Animal {
  bark() { console.log(this.name + ' says woof!'); } // OK
}

仅在编译时进行限制

TypeScript 访问修饰符仅执行编译时检查。生成的 JavaScript 仍然具有公共属性;运行时不会强制执行这些限制。

使用 # 实现 JavaScript 私有成员

JavaScript 具有使用 `#` 的原生私有字段,并会在运行时强制执行私有性。TypeScript 在支持自身 `private` 关键字的同时,也支持这种语法。
class Counter {
  #count = 0; // runtime private (JavaScript)
  increment() { this.#count++; }
  get value() { return this.#count; }
}

readonly 修饰符

readonly 属性只能在构造期间设置。初始化后无法更改。
class User {
  readonly id: number;
  constructor(id: number) { this.id = id; }
}
const u = new User(1);
// u.id = 2; // Error!

组合修饰符

您可以在同一属性上组合使用访问修饰符和 readonly。
class Config {
  constructor(
    public readonly host: string,
    private readonly port: number
  ) {}
}

构造函数中的私有修饰符

将构造函数设为私有可以阻止外部实例化。请改用静态工厂方法。
class Singleton {
  private static instance: Singleton;
  private constructor() {}
  static getInstance(): Singleton {
    return this.instance ??= new Singleton();
  }
}

受保护的构造函数

受保护的构造函数会阻止直接实例化,但允许子类通过 super() 调用它。
class Base {
  protected constructor(public id: number) {}
}
class Derived extends Base {
  constructor(id: number) { super(id); }
}

访问修饰符不会增加运行时开销

由于 TypeScript 会擦除所有类型信息,访问修饰符不会对编译后的 JavaScript 输出大小或性能产生任何影响。

快速检查

哪种访问修饰符可以让类成员在类及其子类中访问,但不能从外部代码访问?

回顾

对于可访问的成员,请使用公共修饰符(默认);对于封装的内部成员,请使用私有修饰符;对于供子类使用的成员,请使用受保护修饰符。添加 readonly 可防止构造后发生修改。

常见问题解答

「public、private 与 protected 修饰符」课时是免费的吗?

是的 — 「public、private 与 protected 修饰符」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 TypeScript Academy 课程的其余内容,请升级到 CoddyKit PRO。 TypeScript Academy 课程共包含 4 节课。

「public、private 与 protected 修饰符」这节课中我会学到什么?

使用修饰符控制对类成员的访问 你通过在浏览器中直接运行的动手代码来练习 TypeScript Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 TypeScript Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 TypeScript Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「public、private 与 protected 修饰符」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 TypeScript Academy 课中编写并运行代码吗?

能。每节 TypeScript Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. TypeScript 类与构造函数
  2. public、private 与 protected 修饰符
  3. readonly 属性与参数属性
  4. 使用类实现接口
← 返回 TypeScript Academy