在javaScript中,对象的属性分为两种类型:数据属性和访问器属性。javascript
数据属性包含的是一个数据值的位置,在这能够对数据值进行读写。java
数据属性包含四个特性,分别是:函数
访问器属性不包含数据值,包含的是一对get和set方法,在读写访问器属性时,就是经过这两个方法来进行操做处理的。this
访问器属性包含的四个特性:code
对象的属性经过 Object.getOwnPropertyDescriptor() 获取对象的属性经过 Object.defineProperty() 修改对象
数据属性和访问器属性是同级别的关系,只是因为功能不一样把它们分红两派,按照它们所谓的 “特征值” 定义这个属性的性质。访问器属性只是由于它带有能够访问对象内其它属性的功能(经过 getter、setter 函数),并通过一些处理从而实现 “设置一个属性的值会致使其余属性发生变化”的效果。ip
若是一个对象属性同时有(value或writable)和(get或set)关键字,将会产生一个异常若是只指定get方法,不指定set方法,那么这个属性是只读的,反之则是只写的get
let obj = {a:1,_b:2} Object.getOwnPropertyDescriptor(obj,'a') /* { value: 1, writable: true, enumerable: true, configurable: true } */ //修改数据属性 Object.defineProperty(obj,'a',{ value: 100, writable: false, enumerable: false, configurable: true }) Object.getOwnPropertyDescriptor(obj,'a') /* { value: 100, writable: false, enumerable: false, configurable: true } */ // 修改访问器属性 Object.defineProperty(obj,'b',{ get(){ return this._b }, set(newVal){ this._b = this._b + newVal }, }) obj.b = 5 console.log(obj.b) // 7