首页 > Web开发 > 详细

js 创建私有变量

时间:2020-10-29 19:45:51      阅读:37      评论:0      收藏:0      [点我收藏+]

一 通过闭包存储

let CPrivate = function(value){
      let _private = value;
      return {
          getValue:()=> _private,
          setValue:(value)=> {_private = value}
      }
}

二 通过Symbol创建私有变量 - 将私有变量值存储到实例化的类中

let CPrivate = (
      function(){
            const _private  = Symbol(‘pv‘);
            class CPrivate {
                  constructor(value) {
                        this[_private] = value; //初始化私有变量
                  }
                  getValue(){
                        return this[_private]
                  }
                  setValue(value){
                        this[_private] = value;
                  }
            }
            return CPrivate
      })();
let p1 = new CPrivate(‘‘); //私有变量 p1
p1.getValue();// ‘‘
p1.setValue(‘蝴蝶效应‘);
p1.getValue(); // ‘蝴蝶效应‘

let p2 = new CPrivate(‘世界是普遍联系的‘); //私有变量 p2
p2.getValue();// ‘世界是普遍联系的‘
p2.setValue(‘所以但行好事,莫问前程‘);
p2.getValue(); // ‘所以但行好事,莫问前程‘

p1.getValue(); // ‘蝴蝶效应‘ 所以 p1 和 p2 是两个单独的私有变量类

三 通过 WeakMap 创建 私有变量集合 - 将私有化变量值存储到 WeakMap的数据结构的变量中

let CPrivate = (
    function (){
        const _private = new WeakMap(); // 创建私有变量集合
        class CPrivate {
            constructor(value) {
                _private.set(this,value);
            }
            getValue(){
                return _private.get(this);
            }
            setValue(value){
                _private.set(this,value);
            }
        }
        return CPrivate;
    }
)();

let p1 = new CPrivate(‘‘); //私有变量 p1
p1.getValue();// ‘‘
p1.setValue(‘质量互变‘);
p1.getValue(); // ‘质量互变‘

let p2 = new CPrivate(‘做一个靠谱的人‘); //私有变量 p2
p2.getValue();// ‘做一个靠谱的人‘
p2.setValue(‘凡事有交代,件件有着落,事事有回音‘);
p2.getValue(); // ‘凡事有交代,件件有着落,事事有回音‘

p1.getValue(); // ‘质量互变‘ 所以 p1 和 p2 是两个单独的私有变量类

利用WeakMap 存储 私有变量的好处是 当实例被销毁时候,改私有变量会被销毁。或者利用 WeakMap 中的clear方法,统一销毁所有私有变量,防止闭包引起的 可能内存泄露问题。

四 利用ES 新提案 创建私有变量

class CPrivate {
      #x;
      constructor(value) {
            this.#x = value;
      }
      getValue(){
            return this.#x;
      }
      setValue(value){
            this.#x = value
      }
};

js 创建私有变量

原文:https://www.cnblogs.com/honkerzh/p/13898378.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!