1
0
mirror of https://github.com/ruanyf/es6tutorial.git synced 2025-05-24 18:32:22 +00:00
This commit is contained in:
ruanyf 2020-01-29 19:50:24 +08:00
parent f9e16e462d
commit 0cc6602aca

View File

@ -1083,18 +1083,20 @@ undefined
前文说过WeakMap 应用的典型场合就是 DOM 节点作为键名。下面是一个例子。
```javascript
let myElement = document.getElementById('logo');
let myWeakmap = new WeakMap();
myWeakmap.set(myElement, {timesClicked: 0});
myWeakmap.set(
document.getElementById('logo'),
{timesClicked: 0})
;
myElement.addEventListener('click', function() {
let logoData = myWeakmap.get(myElement);
document.getElementById('logo').addEventListener('click', function() {
let logoData = myWeakmap.get(document.getElementById('logo'));
logoData.timesClicked++;
}, false);
```
上面代码中,`myElement`是一个 DOM 节点,每当发生`click`事件,就更新一下状态。我们将这个状态作为键值放在 WeakMap 里,对应的键名就是`myElement`。一旦这个 DOM 节点删除,该状态就会自动消失,不存在内存泄漏风险。
上面代码中,`document.getElementById('logo')`是一个 DOM 节点,每当发生`click`事件,就更新一下状态。我们将这个状态作为键值放在 WeakMap 里,对应的键名就是这个节点对象。一旦这个 DOM 节点删除,该状态就会自动消失,不存在内存泄漏风险。
WeakMap 的另一个用处是部署私有属性。