js中的WeakMap
文章类型:ES6
发布者:admin
发布时间:2023-04-05
weakMap是ES6引入的一种新的集合类型,是一种弱引用的映射表。它的功能类似于Map,但有一些不同之处。
一:定义
1:与Map不同,WeakMap的键只能是对象,不能是原始类型(如字符串、数字等)。这是因为WeakMap使用弱引用来存储键。
如果一个对象作为WeakMap的键,并且没有其他引用指向该对象,那么该对象将被垃圾回收。
这使得WeakMap非常适合于存储私有数据,因为一旦对象被销毁,与之关联的数据也会被自动删除。
2:它没有forEach()方法,也不能被迭代。这是因为WeakMap的键可能随时被垃圾回收,因此无法保证WeakMap的完整性。
它只提供了get()、set()、has()和delete()等基本方法来管理和访问集合中的数据。
二:作用
1:防止内存泄露,WeakMap的key只能是对象,不能是基本类型
三:使用场景
1:想临时记录数据或关系
2:vue3中大量使用了WeakMap
四:代码
const privateData = new WeakMap();
class MyClass {
constructor() {
privateData.set(this, { x: 0, y: 0 });
}
get x() {
return privateData.get(this).x;
}
set x(value) {
privateData.get(this).x = value;
}
get y() {
return privateData.get(this).y;
}
set y(value) {
privateData.get(this).y = value;
}
}
使用WeakMap来存储MyClass实例的私有数据。
在构造函数中,我们使用this作为WeakMap的键,并将一个包含x和y属性的对象作为值存储在其中。
我们使用get()和set()方法来访问和修改私有数据。
由于privateData是WeakMap,当MyClass实例被销毁时,与之关联的私有数据也将被自动删除。