1、思考
Vue的响应式到底要干什么?
- 无非就是要知道当你读取对象的时候,要知道它读了。要做一些别的事情
- 无非就是要知道当你修改对象的时候,要知道它改了。要做一些别的事情
- 所以要想一个办法,把读取和修改的动作变成一个函数,读取和修改的时候分别调用对应的函数
在ES6之前,只能通过Object.defineproperty 给它变成一个get和set函数。当读取这个属性的时候运行get,修改这个属性的时候运行set
在ES6之后,就能通过Porxy去代理整个对象
2、Vue2的做法
针对某个对象中某个属性的做法
通过Object.defineProperty去针对某个对象的属性去进行监听
const obj = { a: 1, b: 2, c: { d: 3, e: 4, }, } // 保存初始值 let v = obj.a Object.defineProperty(obj, 'a', { get() { console.log('a', '读取') return v }, set(val) { // 当原来的值与重新赋值的值不一样的时候才进行修改 if (val !== v) { console.log('a