WeakMap 数据类型
MDN上的说明
WeakMap 对象是键/值对的集合,且其中的键是弱引用的。其键只能是对象,而值则可以是任意的。
- WeakMap对key的引用是弱引用
- WeakMap的key只能是对象
key中的对象保持弱引用
var obj = {};
......
obj = null;
具体到WeakMap
var obj = {};
var wm = new WeakMap();
wm.set(obj, 1);
wm.get(obj); // 1
......
obj = null;
WeakMap的使用场景
- 在 DOM 对象上保存相关数据
let wm = new WeakMap(), element = document.querySelector(".element");
wm.set(element, "data");
let value = wm.get(elemet);
console.log(value); // data
element.parentNode.removeChild(element);
element = null;
- 数据缓存
const cache = new WeakMap();
function countOwnKeys(obj) {
if (cache.has(obj)) {
console.log('Cached');
return cache.get(obj);
} else {
console.log('Computed');
const count = Object.keys(obj).length;
cache.set(obj, count);
return count;
}
}
- 私有属性
const privateData = new WeakMap();
class Person {
constructor(name, age) {
privateData.set(this, { name: name, age: age });
}
getName() {
return privateData.get(this).name;
}
getAge() {
return privateData.get(this).age;
}
}
export default Person;