咱們知道Vue框架劇本雙向數據綁定功能,在咱們使用方便的同時,還有一些細節問題咱們並不知道,接下來一塊兒探討一些吧vue
Object.defineProperty(obj,key,{ set:function (newV) { val = newV; // 通知全部用到這個屬性的DOM更新 dep.notifyAll(); }, get:function () { if (Dep.currentSub) { // 對這個屬性,新訂閱一個元素 dep.subscribe(); } return val; } });
咱們聲明好數組,其中放置基本數據類型react
let vm = new Vue({ el:'#app', template:` <div> <p v-for="n in arr" > {{n}} </p> </div>`, data(){ return { arr:[1,2,3] } } });
如今咱們改變其中的元素值數組
據說有個函數可讓Vue知道你在添加屬性,並完成響應式。Vue.set(obj.key.value);app
哇,有效果!!框架
咱們再來改變他看看是否能雙向數據綁定函數
哦! No!看看源碼code
看到了嗎? 基本(原始)數據類型還給個警告!!對象
往下執行,若是是數組直接結束了,並不作reactive操做哦blog
以前講解了Vue作數據劫持是基於Object.defineProperty的,可是他只能作set和get,而沒法監視到屬性的增長或者減小,這點卻是能夠用Vue.set(obj.key.value)解決!而數組+基本數據類型不行! 固然話說回來,真實業務中,直接用數組操做基本數據類型的場景還真很少!
圖片