对象增强
属性描述符需要使用到Object.defineProperty
接收三个参数:
第一个参数: obj
第二个参数: prop要定义或修改的属性的名称或Symbol
第三个参数: descriptor要定义或修改的属性描述
属性描述符有类:数据属性、存取属性
数据属性描述符
- configurable
设置为false不可配置(不可被删除,不可在把值变为true),默认为true
1
2
3Object.defineProperty({
configurable: false
})- enumerable
设为false不可被枚举
- writable
不可被写入(只读)
- value
设置之后每次读取的值都为固定的值。
存取属性描述符
- configurable
- enumerable
- set
当定义的属性被修改/赋值,就会执行set方法,并将修改的值传入set函数的参数中。
1
2
3
4
5
6
7
8
9var _name = '' // 私有变量
Object.defineProperty({
set: function(value) {
console.log(value) //value为修改后的值 默认为undefined
},
get: function() {
return _name
}
})- get
在调用obj.name就会执行get方法,默认的值也为undefined。
Object.defineProperties
可以监听多个属性描述符。
对象增强
属性描述符需要使用到Object.defineProperty
接收三个参数:
第一个参数: obj
第二个参数: prop要定义或修改的属性的名称或Symbol
第三个参数: descriptor要定义或修改的属性描述
属性描述符有类:数据属性、存取属性
数据属性描述符
- configurable
设置为false不可配置(不可被删除,不可在把值变为true),默认为true
1
2
3Object.defineProperty({
configurable: false
})- enumerable
设为false不可被枚举
- writable
不可被写入(只读)
- value
设置之后每次读取的值都为固定的值。
存取属性描述符
- configurable
- enumerable
- set
当定义的属性被修改/赋值,就会执行set方法,并将修改的值传入set函数的参数中。
1
2
3
4
5
6
7
8
9var _name = '' // 私有变量
Object.defineProperty({
set: function(value) {
console.log(value) //value为修改后的值 默认为undefined
},
get: function() {
return _name
}
})- get
在调用obj.name就会执行get方法,默认的值也为undefined。
Object.defineProperties
可以监听多个属性描述符。