vue用weakMap来收集的依赖的响应式数据,由于数据可能会清空,所以用weakMap这个弱引用,数据清空,这个弱引用也就释放了内存。
//目的: 利用weakMap来收集响应式数据的依赖,保存一个映射关系。
const obj1 = {
name: "kobe",
};
const obj1NameFn1 = () => {
console.log("obj1NameFn1");
};
const obj1NameFn2 = () => {
console.log("obj1NameFn2");
};
//1. 创建WeakMap
const weakMap = new WeakMap();
//2. 收集依赖结构
//2. 对obj1收集的数据结构
const obj1Map = new Map();
obj1Map.set("name", [obj1NameFn1, obj1NameFn2]);
weakMap.set(obj1, obj1Map);
// 3.如果obj1.name发生来改变
// Proxy/Object.defineProperty
obj1.name = "hope";
const targetMap = weakMap.get(obj1);
const fns = targetMap.get("name");
fns.forEach((item) => item());