ustbhuangyi/vue-analysis

响应式对象里proxy方法中的代理疑问

ryan0217 opened this issue · 1 comments

export function proxy (target: Object, sourceKey: string, key: string) {
  sharedPropertyDefinition.get = function proxyGetter () {
    return this[sourceKey][key]
  }
  sharedPropertyDefinition.set = function proxySetter (val) {
    this[sourceKey][key] = val
  }
Object.defineProperty(target, key, sharedPropertyDefinition)

通过 Object.defineProperty 把 target[sourceKey][key] 的读写变成了对 target[key] 的读写。所以对于 props 而言,对 vm._props.xxx 的读写变成了 vm.xxx 的读写,而对于 vm._props.xxx 我们可以访问到定义在 props 中的属性,所以我们就可以通过 vm.xxx 访问到定义在 props 中的 xxx 属性了

我理解的是执行Object.defineProperty(target, key, sharedPropertyDefinition)后,对target[key]的读写会变为对target[sourceKey][key]的读写,与您文中的描述恰好相反,所以对此抱有困惑,望您能为我解疑,谢谢。

表达的意思就是通过 vm.xxx 访问到定义在 props 中的 xxx 属性
可能反过来表述更贴切一些,欢迎提 pr