今天看了一下vue到底是怎么實現響應式的,發現特別簡單, 就是使用了 Object.defineProperty 這個函數來進行監聽,
這是一個demo
var vm = {}; var data = { name: 'zhangsan', age: 18 } var key , value; for ( key in data) { (function(key) { Object.defineProperty(vm,key,{ get: function() { console.log('get'); return data[key]; }, set: function(newValue){ console.log('set'); data[key] = newValue; } }) })(key) }
第一個參數相當於一個vue實例,第二個參數就是data的key,第三個參數就是一個對象,對象中包含了get和set兩個函數,分別監聽獲取和修改
在控制台獲取和修改值就會打印出get和set
這樣就實現了數據的監聽,可以實現響應式了