19_Vue如何监测到对象类型数据发生改变的?( 三 )


19_Vue如何监测到对象类型数据发生改变的?

文章插图
数组当中是可以用字符串来获取元素值的(很少)
完整代码
// 这有一个对象,对象有两个属性let data = https://www.huyubaike.com/biancheng/{name:"waves",age: 0}// 实例化一个监视器对象let observer = new Observer(data);// 监视对象Observerfunction Observer(obj){// 1、获取data当中的所有key值let properties = Object.keys(data); // ["name","age"]// 2、迭代 properties数组properties.forEach((property)=>{// 3、在迭代的过程当中,使用definedProperty进行数据代理Object.defineProperty(this,property,{// 配置get和setget(){// 很简单,因为data没有做数据代理,返回data[property]即可return data[property]; // data["name"] = waves},set(val){// 赋值即可data[property] = val}})})}总结
  1. 我们这里设置了一个data

    • 19_Vue如何监测到对象类型数据发生改变的?

      文章插图
  2. 通过我们的一系列配置,data身上有的属性,Observer实例身上也有
  3. 并且,这个observer身上的属性都做了数据代理
  4. 当然,vue写的比我们完善的多
  5. 比如,如果data当中还存在对象怎么办?

19_Vue如何监测到对象类型数据发生改变的?

文章插图
vue在这里写了递归,一直找,找到这个属性不再是对象为止
19_Vue如何监测到对象类型数据发生改变的?

文章插图
数组也是一个道理,vue也能给你找出来,不过 关于数组和对象的代理,这二者的处理方式不同,下节会讲解

经验总结扩展阅读