请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么需要Proxy机制呢?

为什么需要把组件内的data的key都代理了,直接引用同一个对象不可以吗?
例如:this.message = this._data.message

正在回答

2回答

问题来了,现在你要实现你的需求,你会在源码里怎么写。
我认为它的 proxy 就是实现了把 this.xxx 指向 this._data.xxx 啊,如果不这么写,难不成还要遍历一次吗?

0 回复 有任何疑惑可以回复我~
  • 提问者 Derek_is_spartan #1
    我看到源代码中是这样的:
    if (!(key in vm)) {
         proxy(vm, `_props`, key)
    }
    我看到是对vm[key] 定义了一个访问器属性的代理对象,为什么不直接vm[key] = data[key]呢?
    
    看到了@weixin_四维_0的答案……不知道对不对
    回复 有任何疑惑可以回复我~ 2018-12-17 09:48:06
  • ustbhuangyi 回复 提问者 Derek_is_spartan #2
    proxy 通过 Object.defineProtery,可以做到给原型去做代理,在 extend.js 中有一段代码:
    function initProps (Comp) {
      const props = Comp.options.props
      for (const key in props) {
        proxy(Comp.prototype, `_props`, key)
      }
    }
    如果你直接写的话做不到这一点喔
    回复 有任何疑惑可以回复我~ 2018-12-17 17:14:34
  • 提问者 Derek_is_spartan #3
    明白了!谢谢!
    回复 有任何疑惑可以回复我~ 2018-12-17 18:43:23
慕村2541733 2018-12-16 20:19:55

代理的主要目的是为了收集依赖和视图更新,通过object.defineproperty的get可以收集依赖,set可以触发更新,如果没有代理,这两个过程是没法完成的

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信