简介
在 javaScript 中,对象的属性分为两种类型:数据属性和访问器属性。
数据属性
它包含的是一个数据值的位置,在这可以对数据值进行读写。数据属性包含 4 个特性:
- configurable:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为 true
- enumerable:表示能否通过 for-in 循环返回属性
- writable:表示能否修改属性的值
- value:包含该属性的数据值。默认为 undefined
查看对应属性的特性
Object.getOwnPropertyDescriptor()函数
Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)
1 | //定义一个对象 |
修改属性特性
Object.defineProperty()函数
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
1 | //修改name属性特性 |
访问器属性
这个属性不包含数据值,包含的是一对 get 和 set 方法,在读写访问器属性时,就是通过这两个方法来进行操作处理的。它也包含 4 个属性特性:
- configurable:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为 false
- enumerable:表示能否通过 for-in 循环返回属性,默认为 false
- get:在读取属性时调用的函数,默认值为 undefined
- set:在写入属性时调用的函数,默认值为 undefined
注意:访问器属性不能直接定义,要通过 Object.defineProperty()这个方法来定义。
在上面对象上定义 hello 属性,为访问器属性
1 | var obj = { |
检测 get 和 set(在控制台操作更直观)
1 | //赋值 |
可知,set 函数的参数既是所赋的值,赋值即传参