- 按照正常的理解,如果我们需要对age这个属性进行数据代理
- 让页面能够检测到数据的改变,那么就需要使用这个接口(defined......)
- 那么这个接口的调用,需要如下几个配置
- 需要给谁添加属性
- 属性名是什么
- 配置项(getter和setter)
- 那么对getter而言,如果该属性被访问到了,那么就需要返回该属性的值
文章插图
- 对setter而言,当属性值,发生修改,那么将接收到的修改的属性值,重新赋值给该属性

文章插图
我们虽然添加的是age,但是这里的意思是将原有属性age覆盖掉,使用这个新的age
我们来看下测试结果

文章插图
出现bug的原因
- 其实这个问题很好理解,我们看下错误原因
文章插图
- 这是一个 无限递归产生的bug,该方法一直无限的被调用,从而产生了这个错误
- 为什么呢?
- 我们仔细看下这段代码
文章插图
- 当,age属性被访问的时候,会调用get函数
- 调用get函数,会返回age
- 返回的过程当中,age是不是又被访问了
- 从而产生死循环,无限递归
- 为什么无法修改属性呢?也是这个道理
Observer
- 在vue当中,有个接口叫做Observer,这个接口用来监视页面数据发生的变化
- 不过他底层是如何进行监听的呢
- 我们写不到底层那么详细,只写主要的部分

文章插图
2、我们创建一个function ==> Observer

文章插图
然后实例化这个 Observer,js当中,function是可以当做构造函数使用的

文章插图
该函数需要一个属性,从参数名可以看出,这是一个对象属性
3、现在我们就来配置这个对象,首先我们需要获取到 data这个对象当中的所有key值

文章插图
4、对这个数组,进行循环

文章插图
5、在迭代的过程当中,使用definedProperty进行数据代理

文章插图
参数解析,为什么这里,添加数据的对象(参数1) 是 this?
- 使用this,那么就是给 this所指向的对象 ==> Observer;也就是我们刚刚实例化出来的对象
文章插图
- 给它添加属性(property参数)
- 那么接下来我们就在 参数三 当中配置get和set了
经验总结扩展阅读
- 2023二本理科最吃香的专业 如何选专业
- 新房装修室内风水如何布局 新房装修有哪些风水讲究
- 厨房推拉门如何选择 厨房推拉门吊轨好还是地轨好呢
- 简笔画如何画漫画羊(简笔画羊的画法大全简单)
- 简单的绵羊怎么画(如何画简单的绵羊)
- 如何快速高效地煲耳机(自然煲耳机方法)
- 蓝牙耳机如何煲机(新耳机要如何正确煲机)
- 餐厅空间小如何设计 开门见餐厅的房子如何设计
- 高考如何选大学和专业 有哪些方法
- 厨房橱柜如何设计实用 厨房橱柜设计原则是什么