Javascript 实现的类属性私有化

ES6 中实现对象编程 定义类方法

class A{
   constructor(){
       //构造函数  用来定义初始化数据  
     
   }
}

 

非私有化属性直接定义即可,例如

class A{
   constructor(){
       //构造函数  用来定义初始化数据  
       this.publicAttrbute = {};  
   }
}

这样在实例化类之后即可进行访问属性

var a = new A();
 
console.log(a.publicAttrbute);

当想要定义私有化属性的时候,即不想在使其在外部可以直接访问或定义可以用WeakMap来实现

const privateAttrbute = new WeakMap(); 
class A{
   constructor(){
       //构造函数  用来定义初始化数据  
       privateAttrbute.set(this, {}) //初始化私有属性  
       
   }
}

WeakMap散列的KEY值是对象,所以在外部无法进行直接访问与设置,在内部可以用set,get来提供获取与设置接口

const privateAttrbute = new WeakMap(); 
class A{
   constructor(){
       //构造函数  用来定义初始化数据  
       privateAttrbute.set(this, {}) //初始化私有属性  
       
   }

   get private(){
        return privateAttrbute.get(this);
   }  
    
   set private(value){
        privateAttribute.set(this.value);  
    }

    demo(){
        this.private['test'] = 1;
    }
}

使用export default 提供

export default (function(){
    const privateAttrbute = new WeakMap(); 
  class A{
     constructor(){
         //构造函数  用来定义初始化数据  
         privateAttrbute.set(this, {}) //初始化私有属性 
     }

     get private(){
          return privateAttrbute.get(this);
     }  
    
     set private(value){
          privateAttribute.set(this.value);  
      }

      demo(){
          this.private['test'] = 1;
      }
  }
  return A;
})()

 

posted @ 2020-04-27 12:37  倔强新手猿  阅读(631)  评论(0编辑  收藏  举报