Vue 動態資料繫結核心方法

DemonGao發表於2017-02-26

引言

我之前經常使用 Vue,後來不滿足於僅僅使用它,我想了解其內部實現原理,所以就嘗試學習其原始碼,獲益匪淺。所以,如果你跟我一樣,希望挑戰這高難度的事情,那就開啟這一系列吧!

基本上 MVVM 資料雙向繫結的框架大都採用了大量的 Object.defineProperty 來實現。

Object.defineProperty 語法


Object.defineProperty(obj, prop, descriptor)

引數:

obj

      需要定義屬性的物件。

prop

      需定義或修改的屬性的名字。

descriptor

      將被定義或修改的屬性的描述符。

返回值

      返回傳入函式的物件,即第一個引數obj。

描述


該方法允許精確新增或修改物件的屬性。一般情況下,我們為物件新增屬性是通過賦值來建立並顯示在屬性列舉中(for...inObject.keys 方法), 但這種方式新增的屬性值可以被改變,也可以被刪除。而使用 Object.defineProperty() 則允許改變這些額外細節的預設設定。例如,預設情況下,使用 Object.defineProperty() 增加的屬性值是不可改變的。

物件裡目前存在的__屬性描述符__有兩種主要形式:資料描述符存取描述符。資料描述符是一個擁有可寫或不可寫值的屬性。存取描述符是由一對 getter-setter 函式功能來描述的屬性。描述符必須是兩種形式之一;不能同時是兩者。

資料描述符和存取描述符均具有以下可選鍵值:

configurable

      當且僅當該屬性的 configurable 為 true 時,該屬性描述符才能夠被改變,也能夠被刪除。預設為 false

enumerable

      當且僅當該屬性的 enumerable 為 true 時,該屬性才能夠出現在物件的列舉屬性中。預設為 false

資料描述符同時具有以下可選鍵值:

value

      該屬性對應的值。可以是任何有效的 JavaScript 值(數值,物件,函式等)。預設為 undefined

writable

      當且僅當該屬性的 writable 為 true 時,該屬性才能被賦值運算子改變。預設為 false

存取描述符同時具有以下可選鍵值:

get

      一個給屬性提供 getter 的方法,如果沒有 getter 則為 undefined。該方法返回值被用作屬性值。預設為 undefined

set

      一個給屬性提供 setter 的方法,如果沒有 setter 則為 undefined。該方法將接受唯一引數,並將該引數的新值分配給該屬性。預設為 undefined

相關文章