关于Object.defineProperty

82 阅读1分钟

Object.defineProperty()  方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象

声明一个对象

let iphone = 20
    let person = {
        name: '张三',
        sex: '男',
        // age: 20
    }

首先 使用`Object.defineProperty()这个方法给person对象添加age属性

Object.defineProperty()接收3个参数

1.给谁添加属性 2.添加的属性名 3.其他配置项

Object.defineProperty(person,'age',{
        value:18
    })

QQ截图20220905120259.png

这个时候控制台打印perosn 发现age属性已经添加上去了

此时可以用for遍历一下这个对象

 for (let key in person) {
        console.log('@', person[key]) //@张三 @男 
    }

发现只打印了源数据 并没有打印出添加的age属性,于是得出结论 age属性不可被枚举(遍历)

如果想要让这个属性可遍历 此时可以添加一个配置项

 enumerable: true, // 控制属性是否可以枚举,默认值是false

如果想删除age属性

delete person.age // false

发现返回false 说明删除失败 这个时候再添加一个配置项 让age属性可以被删除

// configurable: true, // 控制属性是否可以被删除,默认值为false

Object.defineProperty()方法有两个函数 一个是get 另一个是set

  // 当有人读取person的age属性时,get函数就会被调用,且返回值就是age的值
  
  // 当有人修改person的age属性时, set函数(setter)函数就会被调用, 且会收到修改的具体值
  

当修改age属性时 set函数会被调用 此时set会接收到一个参数value 这个参数表示修改后的值