js属性描述对象

javascript属性描述结构

6个元属性

  1. value 属性值,默认undefined
  2. writable 属性的值是否可写,默认true
  3. enumerable 属性是否可遍历,默认true
  4. configurable 属性是否可配置(属性描述对象的可写性,为false时value,writable,enumerable和configurable都不能被修改或者了,value除外),默认true
  5. get getter函数,默认undefined
  6. set setter函数,默认undefined

Object的方法

Object.getOwnPropertyDescriptor(对象,属性名)

用于获取属性描述对象

Object.getOwnPropertyDescriptors(对象)

用于获取所有属性描述对象

Object.defineProperty(对象,属性名,描述对象)

定义属性描述符

Object.defineProperties(对象,描述对象集)
Object.prototype.propertyIsEnumerable(属性)

判断对象自身的属性的可遍历性

PS

  • for…in只会遍历自身以及原型链上可遍历的属性,而in会遍历原型链上的属性。
  • 在使用Object.definePropert() 定义属性描述符时,如果省略某个描述符,则该描述符默认为false
var obj={}
Object.defineProperty(obj,"b",{value:2,enumerable:false})
//省略了writable、configurable,obj.b的属性描述符为
//value:2,enumerable:false, writable:false, configurable: false;

对象的状态(三种)

  • Object.preventExtensions() 、Object.isExtensible() 扩展性(禁用无法添加新属性)属性描述符无变化
  • Object.seal()、Object.isSealed() 不可配置了(configurable为false,无法添加新属性和删除旧属性)
//默认
{ value: '1',
  writable: true,
  enumerable: true,
  configurable: true }
  
//执行Object.seal()后
{ value: '1',
  writable: true,
  enumerable: true,
  configurable: false }
  • Object.freeze()、Object.isFrozen() 与Object的区别就是writable也为false,变成了常量
//默认
{ value: '1',
  writable: true,
  enumerable: true,
  configurable: true }
  
//执行Object.freeze()后
{ value: '1',
  writable: false,
  enumerable: true,
  configurable: false }

注意事项

  • 冻结只能冻结对象本身,原型不受影响。
  • 对象的属性是引用类型时,冻结的只是一个指针。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值