手写const

508 阅读1分钟

手写const

  //  1. 自定义容器充当数据的存储 
  let obj = {}
  function getConst(key, val) {
      obj[key] = val;
      Object.defineProperty(obj, key, {
          value: val, // 传进来的值
          writable: false, //是否可修改改属性值
          configurable: false, //配置信息是否可修改
          enumerable: true, //是否可枚举
      })
  };
  getConst("age", 10)
  obj.age = 20;
  console.log(obj); // 10  未被修改
  
  console.log('================================================================');

  //  2.全局 window
  function getConst(key, val) {
      window[key] = val;
      Object.defineProperty(window, key, {
          get: function () { // 如果设置了 set 或 get, 就不能设置 writable 和 value 中的任何一个,否则报错
              return constVal;
          },
          configurable: false, //配置信息是否可修改
          enumerable: true, //是否可枚举
      })
  };
  getConst("age", 10)
  age = 20;
  console.log(age); // 10  未被修改