面试题答案
一键面试- 使用WeakMap实现属性封装:
- 在JavaScript中,由于没有真正的私有属性,可借助
WeakMap
来模拟私有属性。WeakMap
的键必须是对象,且键值对是弱引用,外部难以直接访问。 - 示例代码如下:
- 在JavaScript中,由于没有真正的私有属性,可借助
const personWeakMap = new WeakMap();
class Person {
constructor(name) {
const privateData = {};
privateData.name = name;
personWeakMap.set(this, privateData);
}
getName() {
const privateData = personWeakMap.get(this);
return privateData? privateData.name : null;
}
}
- 使用#私有字段(ES2020及以后):
- ES2020引入了#私有字段语法。在类中使用#前缀定义的属性是真正的私有属性,外部代码无法直接访问和修改。
- 示例代码如下:
class Person {
#name;
constructor(name) {
this.#name = name;
}
getName() {
return this.#name;
}
}
在这两种方法中,第一种方法(使用WeakMap
)兼容性更好,适用于较旧的JavaScript运行环境;第二种方法(使用#私有字段)是官方标准的私有属性实现方式,代码更简洁,但需要支持ES2020及以上的环境。