看過Vue2.x的源碼都知道驯妄,其雙向數(shù)據(jù)綁定原理是通過es5的Object.defineProperty荷并,中的set方法來實(shí)現(xiàn)數(shù)據(jù)劫持的,但是有一個(gè)弊端就是無法兼聽到數(shù)組內(nèi)部的數(shù)據(jù)變化(當(dāng)然我們可以通過arr = arr.concat([]))青扔,來實(shí)現(xiàn)內(nèi)部數(shù)據(jù)變化的檢測源织。相比Vue3有一定的性能問題。
Vue3.x是用ES6的語法 Proxy(Proxy 怎么用大家可自行百度微猖,網(wǎng)上教程大把谈息,我就不在這贅述了)對象來實(shí)現(xiàn)的,這個(gè)玩意兒也可以實(shí)現(xiàn)數(shù)據(jù)的劫持凛剥,相比Object.defineProperty的優(yōu)勢是:可以檢測到數(shù)組內(nèi)部數(shù)據(jù)的變化,如下圖:
據(jù)說proxy要比Object.defineProperty的內(nèi)存減半,vue3.x還沒正式發(fā)布侠仇,我也只是聽說,聽說哈犁珠,減不減半我不知道也不敢下結(jié)論。
你以為這就完了嗎?哈哈哈哈耗啦,你沒猜錯(cuò),IE系列都不兼容Proxy,哈哈哈哈哈饼疙。
But
社會(huì)是要向前進(jìn)的溺森,這點(diǎn)相信尤大大已經(jīng)為我們考慮到了,肯定會(huì)有向下兼容的方案窑眯,那就是用原始的Object.defineProperty咯屏积。
寫在最后:大家不管學(xué)什么框架,一定要嘗試去讀下別人的源碼磅甩,不要一上來就vue-cli 就咔咔咔開擼炊林。如果每個(gè)前端都會(huì)vue-cli的話,那請問你的競爭力在哪卷要?
最后希望我的分享能夠幫助到大家渣聚。