zoukankan      html  css  js  c++  java
  • weakmap使用场景

    WeakMap和Map的区别

    如果是普通的值类型则不允许。比如:字符串,数字,null,undefined,布尔类型。而Map结构是允许的,这就是两者的不同之处,谨记。

    跟Map一样,WeakMap也拥有get、has、delete方法,用法和用途都一样。不同地方在于,WeakMap不支持clear方法,不支持遍历,也就没有了keys、values、entries、forEach这4个方法,也没有属性size。

    理由跟WeakSet结构一样:键名中的引用类型是弱引用,你永远不知道这个引用对象什么时候会被垃圾回收机制回收了,如果这个引用类型的值被垃圾机制回收了,WeakMap实例中的对应键值对也会消失。

    1.WeakMap的典型应用:以 DOM节点作为键名的场景

    这种场景下可能是
    (1)想要给网页的dom元素上添加数据时可用 WeakMap:
    用 WeakMap 好处是当该 DOM 元素被清除,对应的 WeakMap记录就会自动被移除
    例1:功能是计数对某个节点的点击

    let myEle = document.getElementbById('logo');
    let myWeakMap = new WeakMap();

    myWeakMap.set(myEle, {timesClicked: 0});

    myEle.addEventListener('click', function() {
    let logoData = myWeakMap.get(myEle);
    logoData.timesClicked++;
    },false);

    (2)进一步说,注册监听事件的listener对象很适合用WeakMap来实现

    // 代码1
    ele1.addEventListener('click', handler1, false);
    ele2.addEventListener('click', handler2, false);

    // 代码2
    const listener = new WeakMap();

    listener.set(ele1, handler1);
    listener.set(ele2, handler2);

    ele1.addEventListener('click', listener.get(ele1), false);
    ele2.addEventListener('click', listener.get(ele2), false);

    代码2比起代码1的好处是:由于监听函数是放在 WeakMap 里面,
    则一旦dom对象ele1,ele2消失,与它绑定的监听函数handler1和handler2 也会自动消失

    2. WeakMap 可用来部署类中的私有属性

    WeakMap 的语法

    1. 通过 new WeakMap 可创建 WeakMap 实例
    2. 没有clear()方法,只有四个方法:get()set()has()delete()
  • 相关阅读:
    MyEclipse 使用快捷键
    修改MyEclipse默认的Servlet和jsp代码模板
    设置MyEclipse开发项目时使用的JDK
    65.广搜练习:细胞数目
    65.广搜练习:细胞数目
    61.新的开始(最小生成树)
    61.新的开始(最小生成树)
    66.广搜练习:最少关卡路
    66.广搜练习:最少关卡路
    64.广搜练习跳马问题
  • 原文地址:https://www.cnblogs.com/zwjun/p/14421405.html
Copyright © 2011-2022 走看看