編譯模組
效果//姓名:},年齡:},居住:}
//返回 姓名:mon,年齡:17,居住:dd
//obj = ,}
//只有巢狀物件沒有陣列
function
compile(template,obj) }找出來
for(let i = 0; i < res.length; i++) }替換對應的屬性值}
return
template
}function
gettemplate(template) ]+}}/g) : // }陣列
}function
replace (template,subtemplate,obj)}','') //
根據}找出對應的屬性
let value = getvalue(obj,prop)//
根據屬性得到屬性值
return template.replace(subtemplate,value) //
把}替換成屬性值
}function
getvalue(obj,prop)
return
value
}
建立虛擬節點
function node(realdom,template)children: (5) [node, node, node, node, node]function
createnode(realdom)
let vnode =node(realdom,template)
for (let i = 0; i < realdom.childnodes.length; i++)
return
node
}虛擬節點
//
template: ""
__proto__: object
渲染頁面的文字
function姓名:arender (node,obj) }的文字節點
node.template =node.template.trim() if
(node.template) }就得到編譯後的字串
if(newtext !==node.realdom.nodevalue)
}else
}就遞迴渲染子節點
render(node.children[i],obj)
} }}
//
年齡:17
居住:等等
響應式
//vm.age = 10object.defineproperty
//將原始物件obj的所有屬性複製到targetobj,並且讓targetobj屬性都具有響應式,當改變時就執行**函式
function
createresponse((obj,targetobj,callback)
}function clone(obj,key,targetobj,callbac)//
把屬性物件又用新的物件這樣轉殖並且擁有響應式
createresponse((obj[prop],newobj,callback)
object.defineproperty(target,prop,,
set:
function
(params)
createresponse(params,newobj,callback)
}else
callback &&callback()}})
}else
, set:
function
(val)
}) }}
//
10年齡:10
合併
export defaultfunction vue(options) )
}
html
年齡:}
居住:}
+let obj =,
}let newobj ={}
createresponse(obj,newobj,() =>)
window.newobj =newobj
window.vm = new
vue(,
}})
vue響應式布局 Vue 響應式原理
vue2 的資料偵測 在 src observer 目錄裡面,元件例項在初始化時,會呼叫 observe 函式處理 data function initdata vm observe 改寫了所有物件屬性的 getter setter 和陣列原型上的 7 個會改寫陣列方法,從而讓 data 變成可響應...
vue響應式原理
響應式系統是vue框架核心的部分,資料物件僅僅是普通的 js物件。當我們改變資料時,檢視也會被改變,本文就來 一下vue 的響應式原理。vue響應式的核心是使用了es5 新增的api object.defineproperty 因此vue不支援ie8 object.defineproperty的作用...
vue響應式原理
要了解響應式原理首先應該知道什麼是響應式 更改 vue的響應式原理是什麼 vue資料的雙向繫結是通過資料劫持結合發布訂閱模式,偵測到資料變化,然後通過object.defineproperty 物件對每個屬性的getter和setter進行劫持。當讀取 data 中的資料時自動呼叫 get 方法,當...