vue運行機制總結

new Vue()運行以後,Vue調用_init函數進行初始化,初始化生命週期,事件,props,methods,data,computed,watch等javascript

其中最重要的是經過Object.defineProperty設置setter和getter函數,用來 實現響應式(數據自動更新)和依賴收集 html

初始化後,調用 $mount掛載組件vue

--------------java

添加響應式數據vue-router

this.$set(this.obj,'name','dongfang')  //由於是在初始化時就劫持監聽數據,因此初始化後添加的數據要響應式,必須經過$set方法添加數據監聽vuex

數組變異方法vue文檔連接數組

當直接修改數組某一項值時,vue無法檢測到,如瀏覽器

vm.items[1] = 'x' // 不是響應性的
vm.items.length = 2 // 不是響應性的

// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice 
vm.items.splice(indexOfItem, 1, newValue)

vue對以下數組方法進行了包裝變異,調用這些方法操做後 同樣能觸發視圖更新ide

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

-----------------函數

Object.defineProperty 和 Proxy

在使用Object.defineProperty時,咱們必須循環遍歷全部的域值才能劫持每個屬性並收集,這也是性能提升的一個瓶頸,固然這是因爲瀏覽器所限,

Proxy的劫持手段則是官宣標準——直接監聽data的全部域值

//data is our source object being observed
const observer = new Proxy(data, {
    get(obj, prop) { ... },
    set(obj, prop, newVal) { ... },
    deleteProperty() {
        //invoked when property from source data object is deleted
    }
})

---------------

vuex,vue-router用到的也挺簡單, 待梳理

相關文章
相關標籤/搜索