TypeScript中构造函数私有参数为何能被类内公共方法访问?
TypeScript参数属性与private访问权限解析
先搞懂构造函数里的private name: string是什么
这是TypeScript提供的参数属性语法,是一种简化写法,等价于手动声明类成员+构造函数赋值的完整写法:
class Person { // 先声明私有成员变量 private name: string; public constructor(name: string) { // 再将构造函数参数赋值给成员变量 this.name = name; } public getName(): string { return this.name; } }
只要在构造函数参数前加上private/public/protected修饰符,TypeScript就会自动帮你完成两步操作:
- 在类中创建一个对应权限的成员变量
- 将构造函数传入的参数值赋值给这个成员变量
为什么getName()能访问private的name?
你对private的核心理解没错:private修饰的成员只能在类的内部访问,但这里的getName()是Person类自身的方法,属于类的内部代码范畴,完全符合private的访问规则。
private真正限制的是类外部的代码直接访问私有成员,比如你要是在类外面直接写person.name,TypeScript会直接报错:
const person = new Person("Jane"); console.log(person.name); // ❌ 报错:属性“name”为私有属性,只能在类“Person”中访问
而通过类自己的方法去访问内部的private成员,是完全合法的——这也是面向对象封装思想的常见用法:用public方法暴露私有成员的访问入口,同时可以灵活控制访问逻辑。
内容的提问来源于stack exchange,提问作者Rob Wilkinson
相关产品推荐
相关产品推荐

