vue攔截原理主要是通過object的defineProperty實(shí)現(xiàn)的藕帜,例如:
var obj = {}
Object.defineProperty(obj,"myName",{
get(){
console.log("get")
},
set(value){
console.log(value) //修改的屬性
}
})
??注意vue3的變化:
Object.defineProperty有以下缺點(diǎn):
1骄呼、無(wú)法監(jiān)聽ES6的Set币喧、Map變化变汪;
2淮逊、無(wú)法監(jiān)聽Class類型的數(shù)據(jù)催首;
3、屬性的新加或者刪除也無(wú)法監(jiān)聽泄鹏;
4郎任、數(shù)組元素的增加和刪除也無(wú)法監(jiān)聽;
需要重點(diǎn)注意的是:
針對(duì)Object.defineProperty的缺點(diǎn)备籽,ES6 Proxy都能夠完美得解決舶治,它唯一的缺點(diǎn)就是對(duì)IE不友好分井,所以vue3在檢查到如果是IE的情況下(沒錯(cuò)IE11都不支持proxy),會(huì)自動(dòng)降級(jí)為Object.defineProperty的數(shù)據(jù)監(jiān)聽系統(tǒng)霉猛。