无需登录 数据私有 本地保存

ES 私有字段演示 - # 语法与封装

9
0
0
0
ES2022

ES 私有字段演示

探索 JavaScript 类中的 #私有字段 语法 —— 真正的运行时封装,让数据隐藏更安全、更优雅。

类定义代码 场景 1:基本私有字段
实时测试控制台
控制台就绪。点击下方测试按钮开始演示私有字段的封装特性。
已加载 BankAccount 类(含 #balance 私有字段)
测试操作:
自定义字段名测试: 试试输入 #balance 观察错误
真正的私有
运行时强制封装,外部无法访问
# 语法简洁
仅需 # 前缀,无需 WeakMap
不可枚举
Object.keys() 无法列出
私有方法
同样支持 # 私有方法
常见问题 FAQ
关键区别:TypeScript 的 private 仅在编译时检查,运行时仍可访问;而 ES # 私有字段是真正的运行时封装,JavaScript 引擎在运行时强制阻止外部访问,更加安全可靠。
不能。私有字段不会被继承,子类无法直接访问父类的 # 私有字段。但可以通过父类暴露的公共 getter/setter 方法来间接访问,这保证了封装边界在继承链中依然有效。
ES2022 支持使用 #fieldName in obj 语法来检查对象是否包含某个私有字段,例如 #balance in account 返回 true。这在不暴露字段值的情况下验证对象结构非常有用。
是的。JSON.stringify()自动忽略私有字段,因为它们不是对象的可枚举属性。如需序列化私有数据,需要在类中实现自定义的 toJSON() 方法。
私有字段在 ES2022 中正式纳入规范。主流浏览器(Chrome 91+、Firefox 90+、Safari 15+、Edge 91+)均已支持,覆盖率超过 95%。对于需要兼容旧浏览器的项目,建议使用 Babel 转译或 WeakMap 模式作为降级方案。
# 私有字段优势:语法更简洁直观、性能更好(引擎原生支持)、真正的运行时封装。WeakMap 优势:兼容旧环境、更灵活的访问控制。现代项目中推荐优先使用 # 语法。