面试官:看过 Vue 的源码没?
候选者:看过。
面试官:那你说下 Vue data 中随意更改一个属性,视图都会被更新吗?
候选者:不会。
面试官:why?
候选者:如果该属性没有被用到 template 中,就没有必要去更新视图,频繁这样性能不好。
面试官:那 Vue 中是如何去实现该方案的?
候选者:在实例初始化过程中,利用Object.defineProperty对 data 中的属性进行数据监听,如果在 template 中被使用到的属性,就被 Dep 类收集起来,等到属性被更改时会调用notify更新视图。
面试官:那你怎么知道那些属性是在 template 被用到的呢?
候选者:WTF。。。这个倒不是很清楚,您能解释下吗?
面试官:OK,那我就简单解释下:
先写个简单的 demo,其中 data 中有 4 个属性a,b,c,d,在模板中被利用到的属性只有a,b。看看是不是只有a,b才会调用Dep收集起来呢?
new