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


文章插图
请看下方的高级配置项
高级配置项get(getter)配置项

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

文章插图
解析
  1. 它的数据类型是一个对象
  2. 当 有人读取 person当中的age属性的时候,get就会被调用
  3. 且get的返回值就是age 的 value值
  4. 自定义get(getter函数)的时候,不能再使用基础配置了

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

      文章插图
那 返回一个 waves 字符串吧
7_vue的数据代理,双向绑定

文章插图
三个点儿
  1. invoke:映射
  2. property:属性
  3. getter:get配置项 == 函数
    • get是属性名
    • 他的类型是一个函数类型
    • 加在一起就是getter

      • 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的数据代理,双向绑定

文章插图
测试

经验总结扩展阅读