Object.defineProperty 的缺点

    • 深度监听,需要递归到底,一次性计算量大
    • 无法监听新增/删除属性(所以需要 vue.set vue.delete 实现新增/删除属性)
    • 无法监听原生数组,需要特殊处理

    Proxy的优点

    • 可以直接监听对象而非属性
    • Proxy 对象实现属性监听,在初始化的时候不需要遍历所有属性,在把所有属性采用defineProperty转化成getter 和setter
    • 如果有多层属性嵌套,只有在访问某个属性的时候,才会递归处理下一级属性
    • 默认可以监听动态添加的属性
    • 默认监听属性的删除操作
    • 默认监听数组索引和length属性
    • 可以作为单独的模块使用