8 30vue響應式原理

2022-08-01 03:33:13 字數 2241 閱讀 2905

編譯模組

效果//

姓名:},年齡:},居住:}

//返回 姓名: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) 

function

createnode(realdom)

let vnode =node(realdom,template)

for (let i = 0; i < realdom.childnodes.length; i++)

return

node

}虛擬節點

//

children: (5) [node, node, node, node, node]

template: ""

__proto__: object

渲染頁面的文字

function

render (node,obj) }的文字節點

node.template =node.template.trim() if

(node.template) }就得到編譯後的字串

if(newtext !==node.realdom.nodevalue)

}else

}就遞迴渲染子節點

render(node.children[i],obj)

} }}

//

姓名:a

年齡:17

居住:等等

響應式

//

object.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)

}) }}

//

vm.age = 10

10年齡:10

合併

export default

function 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 方法,當...