js标准库—属性描述对象

1.JavaScript 提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写可遍历等等。这个内部数据结构称为“属性描述对象”(attributes object)。

  • 每个属性都有自己对应的属性描述对象,保存该属性的一些元信息。
  • 属性描述对象的各个属性称为“元属性”,因为它们可以看作是控制属性的属性。
{
  value: 123,          value是该属性的属性值,默认为undefined。
  writable: false,       writable是一个布尔值,表示属性值(value)是否可改变(即是否可写),默 
                         认为true。
  enumerable: true,         enumerable是一个布尔值,表示该属性是否可遍历,默认为true。
  configurable: false,      configurable是一个布尔值,表示可配置性,默认为true。
  get: undefined,        get是一个函数,表示该属性的取值函数(getter),默认为undefined。
  set: undefined         set是一个函数,表示该属性的存值函数(setter),默认为undefined。
} 

2.Object.getOwnPropertyDescriptor()可以获取属性描述对象。它的第一个参数是目标对象,第二个参数是一个字符串,对应目标对象的某个属性名

3.Object.getOwnPropertyNames()返回一个数组,成员是参数对象自身的全部属性的属性名,不管该属性是否可遍历。

4.Object.defineProperty()方法允许通过属性描述对象,定义或修改一个属性,然后返回修改后的对象,它接受三个参数。

  • object:属性所在的对象
  • propertyName:字符串,表示属性名
  • attributesObject:属性描述对象

5.Object.defineProperties()方法定义或修改多个属性

6.Object.prototype.propertyIsEnumerable()方法返回一个布尔值,用来判断某个属性是否可遍历

7.属性还可以用存取器(accessor)定义。

  • 存值函数称为setter,使用属性描述对象的set属性
  • 取值函数称为getter,使用属性描述对象的get属性

8.一旦对目标属性定义了存取器,那么存取的时候,都将执行对应的函数。利用这个功能,可以实现许多高级特性,比如定制属性的读取和赋值行为。

  • 存取器往往用于,属性的值依赖对象内部数据的场合。

9.冻结对象的读写状态。

  • Object.preventExtensions()可以使得一个对象无法再添加新的属性
  • Object.isExtensible()用于检查是否可以为一个对象添加属性
  • Object.seal()使得一个对象既无法添加新属性,也无法删除旧属性。
  • Object.isSealed()用于检查一个对象是否使用了Object.seal()
  • Object.freeze()可以使得一个对象无法添加新属性、无法删除旧属性、也无法改变属性的值,使得这个对象实际上变成了常量
  • Object.isFrozen()用于检查一个对象是否使用了Object.freeze()

10.局限性

  • 上面的三个方法锁定对象的可写性有一个漏洞:可以通过改变原型对象,来为对象增加属性
  • 如果属性值对象,上面这些方法只能冻结属性指向的对象,而不能冻结对象本身的内容。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值