Object.defineProperty的使用

本文介绍了如何使用`Object.defineProperty`方法为JavaScript对象添加具有控制特性的属性,包括可遍历性、可修改性和可删除性。同时,展示了如何实现数据的读取和设置的监听,以及数据代理的概念,通过一个对象代理对另一个对象的属性进行操作。
摘要由CSDN通过智能技术生成

当前写法可以为person对象添加age属性,但是当前属性不能被遍历、被修改、被删除

let person = {
    name: 'xss',
      sex: '女'
  }
  Object.defineProperty(person, 'age', {
      value: 18
 })

为对象添加可操作属性的写法

let person = {
   name: 'xss',
    sex: '女'
}
Object.defineProperty(person, 'age', {
    value: 18,
    enumerabel: true, // 控制属性是否可遍历
    wriable: true, //   控制属性是否被修改
    configurable: true //控制属性是否被删除
})

实现两个数据之间的数据交互

let ageNum = 18
let person = {
    name: 'xss',
    sex: '女'
}
Object.defineProperty(person, 'age', {
    // 当读取person对象的age属性时,get函数(getter)就会被调用,且返回值就是age的值
    get() {
        console.log('获取age值')
        return ageNum
    },
    // 当修改person对象的age属性时,set函数(setter)就会被调用,且会收到修改的值
    set (value) {
        console.log('设置age值', value)
        ageNum = value
    }
})

// person.age = 20  两者都会同时被修改
// ageNum = 20   会重新通过get获取新的值

数据代理: 通过一个对象代理对另一个对属性的操作(读/写)

let obj = {x: 11}
let obj2 = {y: 22}
Object.defineProperty(obj2, 'x', {
    get () {
        return obj.x
    },
    set (value) {
        obj.x = value
    }
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值