面试题答案
一键面试实现思路
在JavaScript中,可以通过WeakMap来实现对类的某些属性外部不可访问。WeakMap的键是对象,且键所指向的对象一旦在其他地方没有引用,WeakMap中的对应记录就会被垃圾回收机制回收。利用这一点,我们可以将需要保护的属性存储在WeakMap中,只有类内部的方法能够通过持有WeakMap实例来访问这些属性,外部无法直接访问。
示例代码
const privateData = new WeakMap();
class SecureClass {
constructor() {
// 存储私有属性
privateData.set(this, {
secretValue: 'This is a secret'
});
}
getSecretValue() {
return privateData.get(this).secretValue;
}
}
// 测试
const instance = new SecureClass();
// 外部无法直接访问secretValue属性
// console.log(instance.secretValue); // 报错
console.log(instance.getSecretValue()); // 输出: This is a secret