Object.defineProperty() 的使用

Object.defineProperty方法可以给某个对象添加或修改属性,基本语法:
Object.defineProperty(对象,修改或新增的属性名,{
	value:修改或新增的属性的值,
	writable:true/false,//如果值为false 不允许修改这个属性值
	enumerable: false,//enumerable 如果值为false 则不允许遍历
	configurable: false  //configurable 如果为false 则不允许删除这个属性 属性是否可以被删除或是否可以再次修改特性
})	
Object.defineProperty(obj, propertyName, discreptor):
  • obj:操作的对象
  • propertyName:属性名,字符串型
  • discreptor:属性描述符,是对象:
    • value:属性值,默认值是undefined
    • writable:是否可写,默认值是false,不可写(不能被重新赋值)
    • enumerable:是否可枚举(是否可以被for…in或Object.keys()方法获取到键名),默认值是false
    • configurable:是否可配置(是否可以被delete删除或者重新配置属性(重新配置时,会直接报错))
    • get:是一个函数,当访问该属性时,该函数就会执行,函数的返回值就是获取的属性值,默认值是undefined
    • set:是一个函数,当给该属性赋值时,该函数就会执行,函数的第一个形参就是想要赋的值
      补充说明,这里的默认值(writable、enumerable、configurable),说的是通过Object.defineProperty方法添加的属性,如果是通过对象字面量创建的,默认值都是true
      存取描述符范例:
      	var obj = { name: '张三', age: 18 }
      
         	function setSex(sex) {
          Object.defineProperty(obj, 'sex', {
            	// 取
              get: function () {
                  console.log('想要获取sex?哈哈,可以在这里搞点事情')
                  return sex === 'male' ? '男' : '女'
              },
            	// 存
              set: function (val) {
                  console.log('想要给sex赋值?呵呵,又被拦截到了,也可以在这里搞点事情')
                  sex = val
              }
          })
         	}
      
      	setSex('male')
        ```
      
      
属性描述符分为三种:
  • 公共描述符(enumerable、configurable)
  • 数据描述符(value、writable)
  • 存取描述符(get、set)
  • 注意:数据描述符和存取描述符不能都用,公共描述可以都用

可以通过这个方法获取到某对象的某个属性的描述符:Object.getOwnPropertyDescriptor(obj, propertyName)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值