zoukankan      html  css  js  c++  java
  • js创建对象私有属性

    创建隐藏属性

    能想到的创建隐藏属性的方法有三种:

    1. 简单的闭包
    2. 通过Symbol
    3. 通过Map,WeakMap

    闭包

    这种方法我们经常使用,例如:

    // 在某个模块中
    function createPeople(name, age) {
      const _age = age;
      return {name, getAge: function() {return _age;}};
    }
    

    通过Symbol

    提出Symbol这个特殊的唯一的值类型,似乎就是专门为了做对象的属性的

    function createPeople(name, age) {
      const _age = Symbol("Age");
      return {name, getAge: function() {return this[_age];}, [_age]: age};
    }
    

    通过Map/WeakMap

    比起Map,我觉的如果是保存对象的私有属性的话,WeakMap更美丽,因为它可以保存对象的弱引用

    // Map实现
    function createPeople(name, age) {
      const map = new Map();
      map.set("age", age);
      return {name, getAge: function() {return map.get("age");}}
    }
    // WeakMap 实现
    const wMap = new WeakMap();
    function createPeople2(name, age) {
      const ret = {name, getAge: function() {return wMap.get(this).age;}};
      const pravite = {};
      wMap.set(ret, pravite);
    
      pravite.age = age;
      return ret;
    }
    

    同时,实际上在ES2020中已经提供了原生的类定义私有属性的支持,只需要填上一个#,那么他就是私有的了:

    class People {
        constructor(name, age) {
            this.name = name;
            this.age = age;
        }
        
        #fart() {
          console.log("fart");
        }
    }
    

    现在至少在我的Chrome 83+上,是可用的

  • 相关阅读:
    Linux改主机名最简单方法
    while 循环
    Appium UI自动化的那些梗
    常量函数、常量引用参数、常量引用返回值[C++]
    常量指针和指针常量的区别
    XHProf中文手册
    xhprof学习笔记
    C语言中内存操作函数
    DRF源码剖析——视图
    2020CCPC秦皇岛 k Kingdom’s Power
  • 原文地址:https://www.cnblogs.com/freesfu/p/12936852.html
Copyright © 2011-2022 走看看