Object.defineProperty()
方法
添加的属性不会被遍历到
给对象添加(定义)属性的方法
Object.defineProperty(对象名,'要添加的属性名',{配置项,如value:18})
第三个参数配置项
enumerable
:(控制属性是否可以被枚举,默认false)为true可以使添加的属性可被遍历
writable
:控制属性是否可以被修改,默认false
configurable
:控制属性是否可以被删除,默认false
get(){ return number }
:当有人读取该对象被添加属性时被调用(getter),返回值为添加属性的值。number被定义
set(value){ number=value}
:当有人修改该对象被添加属性时被调用(setter),且会受到修改的具体值。number被定义
数据代理
通过一个对象代理对另一个对象中属性的操作(读/写)
let obj={x:100};
let obj1={y:200};
Object.defineProperty(obj1,'x',
{
get(){
return obj.x
},
set(value){
obj.x=value
}
}
)
Vue的数据代理
通过vm来代理data
对象。
好处:更加方便操作data中数据
每条数据都有属于自己的getter和setter
通过Object.defineProperty()
方法vm将data里得数据存到了自身的“_data
”属性中