为什么我们需要 JavaScript 中的 WeakMaps?
javascriptobject oriented programmingprogramming
WeakMap 是 JavaScript 中的集合。这种类型的集合用于以键值对的形式存储数据。在 WeakMap 中,键必须是一个对象,值可以是任何类型。
Map 和 WeakMap 之间的区别在于,在 WeakMap 中,键必须是一个对象,另一个区别是,WeakMap 就像一个黑匣子,键无法检索。
只有知道键,才能访问 WeakMap 的值,这意味着 WeakMap 中的值是私有的。
可以在与任何对象相关的 WeakMap 中存储其他数据,而无需更改其中的数据,并且它还可以管理其内存。
需要 Weakmaps
使用 WeakMaps 我们可以实现以下目标 -
存储私有类的数据
类和对象的私有数据可以存储在 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 元素的其他信息。
在缓存中
如果元素数组作为输入,则计算所有元素的总和。在这里,由于数组也是一个对象,因此它也可以作为弱映射中的键存储。
在使用弱映射时需要记住的一点是,如果存在跟踪与对象行为相关的附加信息的场景,则
不应修改或添加其他属性,并且
内存管理时无需特别注意,
那么在这种情况下,可以毫不犹豫地使用弱映射。