Vue的基础知识(一)
<h4>你对MVVM的理解?与MVC有什么不同?</h4>
<ul>
<li>MVC指的是 Model-View-Controller ,即模型-视图-控制器。</li>
<li>MVVM指的是 Model-View-ViewModel,即模型-视图-视图模型
模型:后端传递的数据
视图:所看到的页面
视图模型:是MVVM的核心,它是连接View与Model的桥梁,实现view的变化会自动更新到viewModel中,viewModel中的变化也会自动显示在view上,是一种<strong>数据驱动视图</strong>的模型</li>
</ul>
<h4>MVVM与MVC的区别</h4>
<ul>
<li>MVC中的controller在MVVM中演变成viewModel</li>
<li>MVVM通过数据来显示视图,而不是通过节点</li>
<li>MVVM主要解决MVC中大量的DOM操作,使页面渲染性能降低,加载速度慢,影响用户的体验问题。</li>
</ul>
<hr />
<h4>请说一下Vue响应数据的原理</h4>
<p>Vue底层对于响应式数据的核心是Object.defineProperty,Vue在初始化数据时,会给data中的属性使用Object.defineProperty重新定义属性(劫持属性的getter和setter),当页面使用对应属性时,会进行依赖收集(收集当前组件的watcher),如果属性发生变化,会通知相关依赖进行更新操作。</p>
<ul>
<li>总结:vue通过数据劫持配合发布者-订阅的设计模式,内部通过Object.defineProperty()来劫持各个属性的getter和setter,在数据变化时通知订阅者,并触发相应的回调。</li>
</ul>
<hr />
<h4>讲一讲Vue是如何检测数组的变化?</h4>
<p>核心思想:使用了函数劫持的方式,重写了数组的方法(push,pop,unshift,shift···)
Vue将data中的数组,进行了原型链的重写,指向了自己所定义的数组原型方法,当调用数组的API时,可以通知依赖更新,如果数组中包含着引用类型,会对数组中的引用类型再次进行监控</p>