Object.defineProperty

2019-09-19  本文已影响0人  无故下架内容so账号已弃用

定义一个 data 对象

var data = {
  name: 'liguoyou'
}

修改属性 name

Object.defineProperty(data, 'name', {
  value: 'guoyou.li'
})

console.log(data) // {name: "guoyou.li"}

添加属性 birthday

Object.defineProperty(data, 'birthday', {
  value: '1995-02'
})

console.log(data) // {name: "guoyou.li", birthday: "1995-02"}

console.log(data.birthday) // 1995-02

尝试重写 data.birthday,
添加属性 birthday时, writable 默认为false, 无法重写 birthday 的值

data.birthday = '2019-09'

// writable 默认为false, 无法重写 birthday 的值
console.log(data.birthday) // 1995-02

添加属性 email, 并设置为可被重写

Object.defineProperty(data, 'email', {
  value: '516115887@qq.com',
  writable: true
})

console.log(data) // {name: "guoyou.li", birthday: "1995-02", email: "516115887@qq.com"}

console.log(data.email) // 516115887@qq.com

修改 email 属性值

data.email = 'guoyou.li@foxmail.com'

console.log(data.email) // guoyou.li@foxmail.com

个人信息对象

var userInfo = {
  id: '56237845',
  name: 'GG'
}

在对象中添加一个属性与存取描述符的示例

var telVal = '13588888888'
Object.defineProperty(userInfo, 'tel', {
  get() {
    return telVal
  },
  set(val) {
    telVal = val
  }
})

如果我们访问 userInfo 的 tel 属性

console.log(userInfo.tel) // 13588888888

如果我们设置 userInfo 的属性值

userInfo.tel = '123543643575'

现在 userInfo.tel 的值总是与 telVal 相同,除非重新定义 userInfo.tel

console.log(userInfo)
// 最终的 userInfo 为:
// {
// id: "56237845"
// name: "GG"
// tel: "123543643575"
// get tel: ƒ get()
// set tel: ƒ set(val)
// __proto__: Object
// }

更多详细内容查看文档
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

上一篇 下一篇

猜你喜欢

热点阅读