this问题

来源:5-14 Props --v2.6.11(四)

前端工程师666777888

2021-04-09

proxy()函数中,get和set为什么用this,而不是用target。感觉用target,代码会更清晰
----------------
vm.key访问时,会执行get方法,此时get里的this怎么就是vm了呢

------
如果vm.name  =  {
  get: function (){this}
}
vm.name.get():此时里面的this是什么?

写回答

1回答

ustbhuangyi

2021-04-09

不能用 target,如果是子组件的话,通常都是在 Vue.extend 的过程执行 initProps
function initProps (Comp) {
 const props = Comp.options.props
 for (const key in props) {
   proxy(Comp.prototype, `_props`, key)
 }
}
可以看到,这里的 target 是 Comp.prototype,所以不能直接用 target,而必须要用 this,this 才可以访问到组件的实例 vm

1
1
前端工程师666777888
响应式对象的get和set方法里面的this,永远指向,响应式对象。 例子: var obj = {}; Object.defineProperty(obj,'s',{ get: function () { console.log(this); 这个this永远是obj对象 return 'io' } }); console.log(obj.s);
2021-04-10
共1条回复

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程