利用WeakMap管理事件监听器
2024-04-10 本文已影响0人
姜治宇
当你需要为一组DOM元素添加监听器,并且希望这些监听器在元素被移除时自动清理时,可以使用WeakMap来存储这些监听器。因为当DOM元素被移除时,它们不再被引用,所以相关的监听器可以被垃圾回收。
const listeners = new WeakMap();
function addListener(element, event, handler) {
const list = listeners.get(element) || [];
list.push({ event, handler });
listeners.set(element, list);
element.addEventListener(event, handler);
}
function removeElement(element) {
const list = listeners.get(element);
if (list) {
list.forEach(({ event, handler }) => {
element.removeEventListener(event, handler);
});
listeners.delete(element);
}
}