1. var a=10;
  2. console.log(Object.getOwnPropertyDescriptor(window,'a'));

image.png
configurable 是否可删除
enumerable 是否可遍历
writable 是否可修改

使用属性描述符setter、getter

  1. 1、只定义getter函数 静默失败,严格模式会报错
  2. 2、只定义setter函数 获取属性值为undefined
  3. var obj={
  4. a: 22,
  5. get bb(){
  6. return this.a
  7. },
  8. set bb(val){
  9. this.a=val*2
  10. }
  11. }
  12. console.log(Object.getOwnPropertyDescriptor(obj,'a'))
  13. console.log(Object.getOwnPropertyDescriptor(obj,'bb'))
  14. console.log(obj)

image.png

  1. Object.isExtensible(obj) //查看对象obj是否可以拓展
  2. Object.preventExtensions(obj) //设置obj不可以拓展
  3. Object.seal(obj); //封印对象
  4. Object.isSealed(obj);//判断是否被封印
  5. isFrozen/freeze
  6. 对象的拓展:不允许增加属性
  7. 对象的封印:不允许增加属性、不允许删除属性
  8. 对象的冻结::不允许增加属性、不允许删除属性、不允许修改属性

image.png

深度冻结对象

  1. function myFreeze(obj) {
  2. Object.freeze(obj);
  3. for(var key in obj){
  4. if(typeof obj[key]==="object"&&obj[key]!==null){
  5. myFreenze(obj[key]);
  6. }
  7. }
  8. }