為什麼我們需要 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 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.