采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
为什么需要把组件内的data的key都代理了,直接引用同一个对象不可以吗? 例如:this.message = this._data.message
问题来了,现在你要实现你的需求,你会在源码里怎么写。我认为它的 proxy 就是实现了把 this.xxx 指向 this._data.xxx 啊,如果不这么写,难不成还要遍历一次吗?
我看到源代码中是这样的: if (!(key in vm)) { proxy(vm, `_props`, key) } 我看到是对vm[key] 定义了一个访问器属性的代理对象,为什么不直接vm[key] = data[key]呢? 看到了@weixin_四维_0的答案……不知道对不对
proxy 通过 Object.defineProtery,可以做到给原型去做代理,在 extend.js 中有一段代码: function initProps (Comp) { const props = Comp.options.props for (const key in props) { proxy(Comp.prototype, `_props`, key) } } 如果你直接写的话做不到这一点喔
明白了!谢谢!
代理的主要目的是为了收集依赖和视图更新,通过object.defineproperty的get可以收集依赖,set可以触发更新,如果没有代理,这两个过程是没法完成的
登录后可查看更多问答,登录/注册
全方位讲解 Vue.js 源码,进阶高级工程师
3.0k 4
1.5k 20
1.3k 14
1.2k 12
2.2k 12