JavaScript中通过闭包来实现私有变量的一种方法

'use strict';
const SecretHolder = (function () {
    const secrets = new WeakMap();
    return class {
        constructor() {
            this.test = secrets;
        }
        setSecrete(secret) {
            secrets.set(this, secret);
        }
        getSecrete() {
            return secrets.get(this);
        }
    }
})();
const a = new SecretHolder();
const b = new SecretHolder();

a.setSecrete("SecreteA");
b.setSecrete("SecreteB");

console.log(a.getSecrete());
console.log(b.getSecrete());

故意将secrets指派给匿名类,然后,查看secrets,发现secrets储存了两个key-value对,证明了只存在一个函数块,而块中私有变量secrets统筹管理类实例与类实例的私有变量的关系,即key是实例,value是实例的私有变量。

posted @ 2022-07-23 16:42  JohnYang819  阅读(127)  评论(0编辑  收藏  举报