## 源码解析 http://hcysun.me/vue-design/art/1start-learn.html
## [MVVM实现双向绑定](https://www.kancloud.cn/sxlcjqq/interviews/768359)
![](https://box.kancloud.cn/b2968467a40942acfd29c5f866b6e558_1446x780.png)
![](https://box.kancloud.cn/d5fb4aa6983681e6c68529be32bcb607_669x420.png)
已经了解到vue是通过数据劫持的方式来做数据绑定的,
其中最核心的方法便是通过Object.defineProperty()来实现对属性的劫持,
达到监听数据变动的目的
[剖析Vue原理&实现双向绑定MVVM](https://segmentfault.com/a/1190000006599500)
## 虚拟DOM
虚拟dom就是解决这个问题的一个思路,到底什么是虚拟dom呢?
通俗易懂的来说就是用一个简单的对象去代替复杂的dom对象。
举个简单的例子,我们在体里插入一个类为一个DIV的。
var mydiv = document。createElement(' div ');
mydiv。className = ' a ' ;
document.body.appendChild(mydiv);
对于这个DIV可以我们用一个简单的对象mydivVirtual代表它,
它存储了对应DOM的一些重要参数,在改变DOM之前,
会先比较相应虚拟DOM的数据,如果需要改变,才会将改变应用到真实的DOM上。
//伪代码
var mydivVirtual = {
tagName : ' DIV ',
className : ' a '
};
var newmydivVirtual = {
tagName : ' DIV ',
className : ' b '
}
if(mydivVirtual.tagName !== newmydivVirtual.tagName || mydivVirtual.className !== newmydivVirtual.className){
change(mydiv)
}
//会执行相应的修改mydiv.className ='b';
//最后<div class ='b'> </ div>
很多时候手工优化dom确实会比virtual dom效率高,对于比较简单的dom结构用手工优化没有问题,
但当页面结构很庞大,结构很复杂时,手工优化会花去大量时间,而且还维护性也不高,
不能保证每个人都有手工优化的能力。至此,虚拟DOM的解决方案应运而生,虚拟DOM很多时候都不是最优的操作,
但它具有普适性,在效率,可维护性之间达平衡。
虚拟dom另一个重大意义就是提供一个中间层,js去写ui,ios安卓之类的负责渲染,就像reactNative一样。
### Diff算法 :差异的过程就是调用补丁函数,就像打补丁一样修改真实DOM。
- CSS
- 长度单位
- 问题们
- 背景渐变
- 禁止用户选中
- 给富文本重置样式
- 移动端常见小问题
- bfc
- flex
- 父元素没有包裹子元素的margin
- VUE
- 原理
- 生命周期
- vue-router原理
- 动态修改路由参数
- 在新窗口打开页面
- 连跳两个页面
- 跳转页面自动回到顶部
- vue+webpack项目,停留一段时间报错
- vue 路由去掉#
- webpack编译目录设置
- config配置
- HTTP
- HTTP状态码
- HTTP1.0,HTTP1.1,HTTP2.0
- axios和ajax的区别
- 模块化
- git
- 比较
- 查看远程仓库地址
- git flow
- 比较分支的不同并保存压缩文件
- Tag
- 回退
- node版本管理
- npm
- 确定用户是否在当前页面
- 前端下载文件
- 只能在微信中访问
- 下载图片
- webpack修改路径为相对路径
- 打开新页面-被浏览器拦截
- textarea高度随内容变化
- Debian/Ubuntu 安装shadowsock
- 垂直居中
- video
- 去掉ios原始播放大按钮
- 前端直播
- ios系列
- js弹出错误代码
- nginx在MAC上的安装、启动、重启和关闭
- 解析latex格式的数学公式
- Mac 新建unix可执行文件
- 正则-格式化a链接
- 原型
- unicode解析
- vue+webpack打包优化
- 各种JS题
- ES6
- seo
- React
- 兼容性
- canvas
- zsh