## 源碼解析 http://hcysun.me/vue-design/art/1start-learn.html
## [MVVM實現雙向綁定](http://www.hmoore.net/sxlcjqq/interviews/768359)


已經了解到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