如何在无类实例时访问类属性?及私有信息防序列化实现
实现思路提示
- 利用闭包特性:在构造函数内部定义
myMethod,让它直接访问构造函数参数privateInfo,此时方法作为闭包可以保留对该变量的引用,且不会挂载到实例属性上,序列化时自然不会被包含。 - 使用WeakMap存储:创建一个外部的WeakMap(或类的静态私有WeakMap),将实例作为键,
privateInfo作为值存入。myMethod通过这个WeakMap根据当前实例获取对应的值,WeakMap的内容不会被序列化,且弱引用不会阻碍实例的垃圾回收。 - 可选补充:如果接受实例上存在隐藏属性,也可以用Symbol作为属性键——默认的
JSON.stringify序列化会忽略Symbol类型的属性键,但如果需要彻底不在实例上保留属性,前两种方案更贴合需求。
内容的提问来源于stack exchange,提问作者user12582392
相关产品推荐
相关产品推荐

