ustbhuangyi/vue-analysis

响应式对象里 defineReactive、proxy 的作用疑问

Closed this issue · 1 comments

首先介绍一下代理,代理的作用是把 propsdata 上的属性代理到 vm 实例上,这也就是为什么比如我们定义了如下 props,却可以通过 vm 实例访问到它。

let comP = {
  props: {
    msg: 'hello'
  },
  methods: {
    say() {
      console.log(this.msg)
    }
  }
}

您在文中提到代理的作用是把 props 和 data 上的属性代理到 vm 实例上,而我在分析 defineReactive 和 proxy 方法时理解的 defineReactive 方法的作用是将每个 prop 对应的值变成响应式,并可通过 vm._props.xxx 访问到定义 props 中对应的属性;proxy 方法的作用是把 vm.xxx 的访问代理到 vm._props.xxx 上。
当访问 vm 实例时会先将 vm.xxx 的访问代理到 vm._props.xxx 上(通过 proxy 实现),而访问 vm._props.xxx 又会被代理到 vm.props.xxx上(通过 defineReactive 实现),所以当定义了上述 props 时可以通过 vm 实例访问到它是通过 defineReactive 和 proxy 方法的双重代理实现的。

与您的理解有些不相符,望您能为我解答,谢谢。

same to issue #33