Quiet
  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我

bajiu

  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我
Quiet主题
  • JavaScript

WeakMap数据类型

bajiu
前端

2021-04-25 14:50:27

WeakMap 数据类型

MDN上的说明

WeakMap 对象是键/值对的集合,且其中的键是弱引用的。其键只能是对象,而值则可以是任意的。

  1. WeakMap对key的引用是弱引用
  2. WeakMap的key只能是对象

key中的对象保持弱引用

var obj = {};
......
obj = null;

具体到WeakMap

var obj = {};
var wm = new WeakMap();
wm.set(obj, 1);
wm.get(obj);	// 1
......
obj = null;

WeakMap的使用场景

  1. 在 DOM 对象上保存相关数据
let wm = new WeakMap(), element = document.querySelector(".element");
wm.set(element, "data");

let value = wm.get(elemet);
console.log(value); // data

element.parentNode.removeChild(element);
element = null;
  1. 数据缓存
const cache = new WeakMap();
function countOwnKeys(obj) {
    if (cache.has(obj)) {
        console.log('Cached');
        return cache.get(obj);
    } else {
        console.log('Computed');
        const count = Object.keys(obj).length;
        cache.set(obj, count);
        return count;
    }
}
  1. 私有属性
const privateData = new WeakMap();

class Person {
    constructor(name, age) {
        privateData.set(this, { name: name, age: age });
    }

    getName() {
        return privateData.get(this).name;
    }

    getAge() {
        return privateData.get(this).age;
    }
}
export default Person;
上一篇

面试题收集01

下一篇

Elasticsearch 介绍

©2024 By bajiu.