Object.defineProperty解析
定义
直接定义一个对象上的新属性或者修改一个对象上的现有属性,并返回此对象
接收的参数
(1) target 目标对象
(2) key 新的属性名或者需要修改的属性名(字符串)
(3) desc 属性描述符[ 数据属性描述符(默认都为false ),访问器属性描述符 ](对象)const obj = { name: 'nano' } Object.defineProperty( obj, 'name', { value: 'roily', configure: false, enumerable:false, writable:false } ) console.log( obj ) --> { name:'roily' }
属性描述符
(1) value
定义: 属性的值
默认值:undefined
(2) configure
定义: 是否可配置(可删除)
默认值:false
(3) enumerable
定义: 是否可枚举(for..key..,Object.keys())
默认值:false
(4) writable
定义: 是否可写(可修改)
默认值:false
- 访问器属性描述符
定义:
(1) 隐藏某一个私有属性,不希望被外界直接使用
(2) 截获某一个属性访问和设置值的过程const obj = { _name:'nano' } Object.defineProperty( obj, 'name',{ get(){ return this._name }, set(value){ this._name = value }, configure: true, enumerable: true } ) console.log( obj ) --> { _name:'nano' } console.log( obj.name ) --> 'nano'
注意:
(1)定义的访问器属性并不会直接出现在对象里
(2)访问器属性描述符不能与value,writable这两个属性描述符一起使用
补充
Object.defineProperties
定义: 直接定义多个对象上的新属性或者修改一个对象上的现有属性,并返回此对象接收的参数
(1) target 目标对象
(2) descs 多个属性描述符集合(对象)使用
let obj = { _age:19 } Object.defineProperties(obj,{ name:{ value: 'abc', configure: true, enumerable: true, writable: true }, age:{ configure: true, enumerable: true, get( ){ return this._age }, set(value ){ this._age = value } } })
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!