JavaScript 中私有字段 # 怎么声明
在 javascript 中,使用 # 符号前缀来声明类的私有字段。这种语法被称为“类私有字段”(private class fields),是 ecmascript 2022 标准的一部分。要声明一个私有字段,只需在类定义中使用 # 加上标识符名称即可,例如 #myfield。该字段只能在类的内部访问,外部代码无法直接读取或修改它。

如何访问和验证私有字段的可见性
私有字段可以通过类的方法进行访问和修改,但在类外部尝试访问时会抛出 ReferenceError。为了验证这一点,可以创建一个包含私有字段的类,并在实例上调用方法获取其值,同时尝试从外部直接访问该字段以观察错误行为。

你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型
class MyClass {
#privateField = 'secret';
getPrivateValue() {
return this.#privateField;
}
}
const instance = new MyClass();
console.log(instance.getPrivateValue()); // 输出: secret
try {
console.log(instance.#privateField); // 抛出 ReferenceError
} catch (e) {
console.error(e.message);
}
私有字段与原型链的关系
私有字段不属于对象的原型链,而是绑定到具体的类实例。这意味着每个实例都有自己独立的私有字段副本,且它们不会通过原型继承共享。此外,私有字段不能在子类中直接访问,即使子类继承了父类。

class Parent {
#parentPrivate = 'parentSecret';
getParentValue() {
return this.#parentPrivate;
}
}
class Child extends Parent {
getChildValue() {
// 这里会抛出 ReferenceError,因为 #parentPrivate 对 Child 不可见
return this.#parentPrivate;
}
}
const childInstance = new Child();
console.log(childInstance.getParentValue()); // 输出: parentSecret
try {
console.log(childInstance.getChildValue()); // 抛出 ReferenceError
} catch (e) {
console.error(e.message);
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










