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

javascriptobject oriented programmingprogramming

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

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

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

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

需要 Weakmaps

使用 Wea​​kMaps 我们可以实现以下目标 -

存储私有类的数据

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

示例

// 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 项目是一个库,它提供了一些创建自定义元素的功能,这些功能使自定义变得简单快捷。因此,该项目使用弱映射来保存 DOM 元素的更改。还可以存储 DOM 元素的其他信息。

在缓存中

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

在使用弱映射时需要记住的一点是,如果存在跟踪与对象行为相关的附加信息的场景,则

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

  • 内存管理时无需特别注意,

那么在这种情况下,可以毫不犹豫地使用弱映射。


相关文章