Object.defineProperty 的缺点
- 深度监听,需要递归到底,一次性计算量大
- 无法监听新增/删除属性(所以需要 vue.set vue.delete 实现新增/删除属性)
- 无法监听原生数组,需要特殊处理
Proxy的优点
- 可以直接监听对象而非属性
- Proxy 对象实现属性监听,在初始化的时候不需要遍历所有属性,在把所有属性采用defineProperty转化成getter 和setter
- 如果有多层属性嵌套,只有在访问某个属性的时候,才会递归处理下一级属性
- 默认可以监听动态添加的属性
- 默认监听属性的删除操作
- 默认监听数组索引和length属性
- 可以作为单独的模块使用