Vue的官方文件中說,Vue 實例的資料都保存在 data 物件中,Vue 將會遞歸將 data 的屬性轉(zhuǎn)換為 getter/setter,從而讓 data 的屬性能夠回應資料變更。
var data = { a: 1 }
// 直接創(chuàng)建一個實例
var vm = new Vue({
data: data
})
vm.a // -> 1
vm.$data === data // -> true
我現(xiàn)在的問題是:
data() {
return {
favorite: (() => {
return loadFromLocal(this.seller.id, 'favorite', false);
})()
};
}
其中l(wèi)oadFromLocal是全域宣告的函數(shù),Vue實例將data中的屬性轉(zhuǎn)換成getter和setter,這個立即執(zhí)行函數(shù)的回傳值會因為其它函數(shù)變化而改變。當我沒有顯示地呼叫favorite的getter和setter時,Vue是如何監(jiān)聽資料變化的呢?是每隔一段時間檢查一次立即執(zhí)行函數(shù)的回傳值嗎?
走同樣的路,發(fā)現(xiàn)不同的人生
1.立即執(zhí)行函數(shù)在new Vue之前,已經(jīng)執(zhí)行了
var App = {
data() {
return {
a: (()=>{ return 1; })()
}
}
}
new Vue({App});
2.監(jiān)聽就是透過getter 和setter進行的,沒有什麼在之前。
在模板中列印屬性,在ready時存取屬性,都相當於調(diào)用了getter