為什麼我們需要 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 的場景。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP