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 反馈 — 无需本地设置。
此课程中的所有课时
- TypeScript 类与构造函数
- public、private 与 protected 修饰符
- readonly 属性与参数属性
- 使用类实现接口