Object.defineProperty()

1、对象的定义与赋值

一般使用obj.prop = value或者obj['prop'] = value

let person = {}
person.name = 'jack'
person[age] = 18

2、Object.defineProperty()语法

Object.defineProperty()是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性

Object.defineProperty(obj,prop,desc)
  1. obj 需要定义属性的当前对象
  2. prop 当前需要定义的属性名
  3. desc 属性描述

3、属性描述

3.1 value

定义属性值

let person = {}
Object.defineProperty(person,'name',{
  value:'jack'
})
console.log(person.name);//jack
3.2 writable

属性值是否能够修改

let person = {}
Object.defineProperty(person,'name',{
  value:'jack'
})
person.name = 'rose'//writable默认为false,所有修改失败
console.log(person.name)//jack
let person = {}
Object.defineProperty(person,'name',{
  value:'jack',
  writable:true
})
person.name = 'rose'
console.log(person.name)//rose
3.3 getter和setter

get:在属性被访问的时候调用

set:在属性被赋值的时候调用

  let person = {}
  let temp = null
  Object.defineProperty(person,'name',{
    get() {
      return temp
    },
    set(value) {
      temp = value
    }
  })

在这里插入图片描述

3.4 configurable

当且仅当该属性的 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应的对象上被删除。默认为 false。

删除属性

let person = {}
Object.defineProperty(person,'name',{
  value:'jack'
})

在这里插入图片描述

let person = {}
Object.defineProperty(person,'name',{
  value:'jack',
  configurable:true
})

在这里插入图片描述

修改描述符

let person = {}
Object.defineProperty(person,'name',{
  value:'jack',
  configurable:true
})

person.name = 'rose'
console.log('修改属性之前  '+person.name);//jack
Object.defineProperty(person,'name',{
  value:'jack',
  writable:true
})
person.name = 'rose'
console.log('修改属性之后  '+person.name);//rose
  1. configurable: false 时,不能删除当前属性,且不能重新配置当前属性的描述符(有一个小小的意外:可以把writable的状态由true改为false,但是无法由false改为true),但是在writable: true的情况下,可以改变value的值

  2. configurable: true时,可以删除当前属性,可以配置当前属性所有描述符。

3.5 enumerable

enumerable设置为false后,不可被枚举

let person = {}
Object.defineProperty(person,'name',{
  value:'jack',
  enumerable:false
})
Object.defineProperty(person,'age',{
  value:18,
  enumerable:true
})
console.log(Object.keys(person));//['age']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值