参考文章
https://www.jb51.net/article/91698.htm
js有两种属性类型
- 数据属性:一般用于存储数据数值
- 访问器属性:一般进行get和set操作,不能直接存储数据数值
属性的特性
- es5中,我们为了描述属性(property)的各种特征,定义了特性(attribute)。
- js不能直接访问特性,要放在[[]]中
- 要修改特性,使用es5的defineProperty方法,有三个参数,对象,属性,描述符对象(可以是一个或者多个特性)
数据类型的四个特性
- [[configurable]]:默认是true,能否通过delete删除属性从而重新定义属性,能否修改其他特性,能否修改为访问器属性
- [[emurable]]: 默认是true,是否能枚举
- [[writable]]: 默认是true,是否可以修改属性的值
- [[value]]: 默认是undefined,是属性的数据值,读写属性值就是在这进行的
访问器属性
- 不包括数据值
- 包含set和get函数
- 读取访问器属性,get函数返回有效值
- 写入访问器属性,set函数处理数据
- 不能直接定义,必须使用defineProperty定义
访问器属性的4个特性
- [[configurable]]:默认是true,能否通过delete删除属性从而重新定义属性,能否修改其他特性,能否修改为访问器属性
- [[emurable]]: 默认是true,是否能枚举
- [[get]]: 读取属性时调用,默认是undefined
- [[set]]: 写入属性时调用,默认是undefined
定义多个属性的方法
- defineProperties()
读取属性的特性的方法
- getOwnPropertyDescripter(),返回描述符对象