7_vue的数据代理,双向绑定( 二 )


  • 7_vue的数据代理,双向绑定

    文章插图

7_vue的数据代理,双向绑定

文章插图
  • age 属性 是有的
  • 但是 value 是多少,目前不知道(...)
  • 想知道怎么办?点进去嘛

7_vue的数据代理,双向绑定

文章插图
get函数
7_vue的数据代理,双向绑定

文章插图
写个代码测试一下,打印一句话
7_vue的数据代理,双向绑定

文章插图

7_vue的数据代理,双向绑定

文章插图
看样子是的 , 我前面的措辞有问题
number与age进行关联
7_vue的数据代理,双向绑定

文章插图
对number值进行修改
7_vue的数据代理,双向绑定

文章插图
那么对age修改呢?
7_vue的数据代理,双向绑定

文章插图
问题所在
  1. 一定是 先访问age
  2. 再调用getter
  3. 当number的value发生改变的时候
  4. 再次访问age,那么就重新调用了getter函数
  5. 重新调用getter , 会返回number,而这个number是修改过的,所以这边数据是同步了
修改age;失败
7_vue的数据代理,双向绑定

文章插图
修改number,再访问age;成功
7_vue的数据代理,双向绑定

文章插图
set(setter)配置项同理,既然有get , 那么与之相辅相成的就是set
当你对age属性进行修改的时候,set(setter)函数就被调用
且,调用的时候 , 会收到具体修改的 值
/*** 需要传递一个参数value* 被调用的时候 , 会收到具体修改的值*/set(value){// 当你对age属性进行修改的时候,set(setter)函数就被调用// 被调用的时候,会收到具体修改的值console.log("pseron.age属性发生修改,修改的值是",value);}测试
7_vue的数据代理,双向绑定

文章插图
实现双向绑定
  1. get函数
    • 实现了 number 与 age 的绑定,number发生修改的时候,age会发生变化
    • 当 age的值发生变化的时候 , number值不变,所以无论怎么修改,age的值 === number
  2. set函数
    • 实现了 age 与 number 的绑定,age的值发生变化的时候,number的值也会跟着变化
    • set函数会接到 age所修改的value,将value 赋值 给 number , 完成双向绑定

7_vue的数据代理,双向绑定

文章插图
测试
7_vue的数据代理,双向绑定

文章插图
总结通过案例
  1. number 与 person,是两个东西
  2. 但是借助 Object.defineProperty,使二者进行了关联
  3. person,确实是一个对象,age确实是person当中的属性
  4. 但是值呢?你现用,我现去给你取
    • 靠谁?。?== get
    • 靠谁改? == set
【7_vue的数据代理,双向绑定】

推荐阅读