Object.defineProperty(Vue 2)
- 原理:通过劫持
对象的已知属性,重写其getter/setter实现拦截 - 限制:
- 只能拦截
已存在的属性,新增属性需通过Vue.set手动触发响应(否则无效) - 无法监听
数组索引修改(如arr[0] = 1)和length变化,需重写数组方法(如push、splice)
- 只能拦截
对vue2中的影响
- data 新增属性用 Vue.set
- data 删除属性用 Vue.delete
- vue2 无法直接修改数组 arr[i] = value