Object.defineProperty()
是什么
简而言之,就是用来设置对象的属性的,一般情况下普通设置方法,【object】.【attribute】=【value】就够了
但是当我们需要对属性添加上设置其他属性的时候这个就满足不了了,比如读取监听,读取内容修改,设置监听,设置内容编辑,是否只读等等
怎么用
Object.defineProperty(【object】,【attribute】,【option】)
object:操作的对象
attribute:编辑的属性
option:配置描述属性
option:{ value:666,//属性对应的值 set(value){//value是对应设置属性后的值 this._xx=value }, get(value){//value是在读取属性时获取的值 return value }, writable:true,//是否可以重写 true/可以 false/只读 enumerable:true,//是否可以被枚举 configurable:false,//是否可以被删除且是否能够重写描述 }
他是vue2数据双向绑定的核心
针对vue使用时的缺陷
1,Object.defineProperty这个函数针对的是对象的某个属性,这就导致在vue中要监听所有属性就必须遍历所有属性
2,当对象新增属性时,必须要对其实施监听,这也是为什么我们在data新增为注册属性的时候需要用到$set,这个就是为了添加监听
3,没办法直接监视Array,需要做转换