在JavaScript對象中有一個Object.defineProperties(obj, props)
方法
該方法主要用來給指定對象添加自定義屬性
可以接收兩個參數:
第一個參數
要定義或者修改屬性的對象
props參數
要定義其可枚舉屬性或修改的屬性描述符的對象。對象中存在的屬性描述符主要有兩種:數據描述符和訪問器描述符具體描述符有以下幾個:
configurable
:
true 當且僅當該屬性描述符的類型可以被改變並且該屬性可以從對應對象中刪除。
默認為 falseenumerable
:
true 當且僅當在枚舉相應對象上的屬性時該屬性顯現。
默認為 falsevalue
:
與屬性關聯的值。可以是任何有效的JavaScript值(數字,對象,函數等)。
默認為 undefined.writable
:
true當且僅當與該屬性相關聯的值可以用assignment operator改變時。
默認為 falseget
:
作為該屬性的 getter 函數,如果沒有 getter 則為undefined。函數返回值將被用作屬性的值。
默認為 undefinedset
:
作為屬性的 setter 函數,如果沒有 setter 則為undefined。函數將僅接受參數賦值給該屬性的新值。
默認為 undefined
Vue的數據代理實現使用了JavaScript的
Object.defineProperties(obj, props)
方法,由於IE8不支持此方法,所以Vue自然也不支持IE8
Vue框架使用了MVVM模式,
這個GitHub倉庫利用Object.defineProperties(obj, props)
方法實現了和Vue一樣的的數據代理,對MVVM做了詳細的解釋和實現。