为什么我们需要 JavaScript 中的 WeakMap?


WeakMap 是 JavaScript 中的一种集合。这种类型的集合用于以键值对的形式存储数据。在 WeakMap 中,键必须是对象,而值可以是任何类型。

Map 和 WeakMap 之间的区别在于,在 WeakMap 中,键必须是对象,另一个区别是 WeakMap 就像一个黑盒,无法检索键。

只有知道键才能访问 WeakMap 的值,这意味着 WeakMap 中的值是私有的。

可以在 WeakMap 中存储与任何对象相关的附加数据,而不会更改其中的数据,并且它还会管理其内存。

WeakMap 的需求

使用 WeakMap,我们可以实现以下目标:

存储类的私有数据

类和对象的私有数据可以存储在 WeakMap 中,因为它们也被称为黑盒。由于还有许多其他方法可以存储私有数据,因此这种方法很少使用。

示例

// using object let wm = new WeakMap();// weakmap let student = {},//object student2 = {}; // set the data into weakmap wm.set(student, " private data"); wm.set(student2, "Private data 2"); // get the data from weakmap console.log(wm.get(student)); console.log(wm.get(student2)); // using class class studentdata { constructor() { wm.set(this, "private"); } printPrivate() { console.log(wm.get(this)); } } let s = new studentdata(); s.printPrivate();

跟踪 DOM 更改

Google Polymer 项目是一个库,它提供了一些功能来创建自定义元素,这些功能使自定义变得轻松快捷。因此,该项目使用 WeakMap 来保存 DOM 元素的更改。还可以存储 DOM 元素的其他信息。

在缓存中

如果给定元素数组作为输入并计算所有元素的总和。这里,由于数组也是一个对象,因此它也可以作为 WeakMap 中的键存储。

在 WeakMap 的情况下,需要注意的重要一点是,如果存在跟踪与对象行为相关的附加信息的场景,那么

  • 不应该修改或添加其他属性,并且

  • 内存管理没有特殊考虑,

那么这就是可以毫不犹豫地使用 WeakMap 的场景。

更新于:2022年8月26日

319 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告