defineProperty和proxy区别

51 阅读1分钟

Object.defineProperty(Vue 2)

  • 原理:通过劫持对象的已知属性,重写其 getter/setter 实现拦截
  • 限制:
    • 只能拦截已存在的属性,新增属性需通过 Vue.set 手动触发响应(否则无效)
    • 无法监听数组索引修改(如 arr[0] = 1)和 length 变化,需重写数组方法(如 pushsplice

对vue2中的影响

  • data 新增属性用 Vue.set
  • data 删除属性用 Vue.delete
  • vue2 无法直接修改数组 arr[i] = value