Object.defineProperty的理解

75 阅读1分钟

Object.defineProperty的语法

Object.defineProperty(对象, '属性', 配置对象),如下

 Object.defineProperty(person, 'age', {
        // value: 18,//设置属性值
        enumerable: true, //控制属性是否可以被枚举(遍历),默认false
        // writable:true,//控制属性是否可以被修改,默认false
        configurable: true, //控制属性是否可以被删除,默认false
        get: function () {
          //当对象属性被读取时,会调用get函数,返回值就是属性的属性值
          return number
        },
        set(value) {
          //当对象属性被修改时,会调用set函数,且会收到修改的具体值
          number = value
        },
      })
      console.log(123, person)

Object.defineProperty的特别之处

  1. 使用Object.defineProperty添加的属性是淡色的,该属性在默认情况下不可被遍历(枚举),不可被修改,不可被删除
  2. 有get和set两个函数,会在获取和修改属性时被调用
补充:Object.keys()
  console.log(666,Object.keys(person))

会将对象person的属性值拿出来形成数组(注意,它会将对象原型上定义的属性过滤掉,即不遍历原型上的属性)

image.png