当前位置:   article > 正文

Vue核心基础1:数据代理

Vue核心基础1:数据代理

1 回顾Object.defineProperty方法

  1. let str = 'hello'
  2. const person = {
  3. name: '张三',
  4. age: 18
  5. }

  1. Object.defineProperty(person, 'sex', {
  2. // value: '男',
  3. // enumerable: true, // 控制属性是否可以枚举,默认值是false
  4. // writable: true, // 控制属性是否可以被修改,默认值是false
  5. // configurable: true, // 控制属性是否可以被删除, 默认为false
  6. // 当有人读取person的sex属性时,get函数就会被调用,且返回值就是sex的值
  7. // get: function () {
  8. // return str
  9. // }
  10. get() {
  11. return str
  12. },
  13. set(value) {
  14. // 当有人修改person的sex属性时,set函数就会被调用,且会收到修改的具体值
  15. console.log('有人修改了sex属性,且值是', value)
  16. str = value
  17. }
  18. })

  1. console.log(person)
  2. console.log(Object.keys(person)) // enumerable: true
  3. person.sex = '女' // writable: true
  4. console.log(person)

2 何为数据代理

通过一个对象代理对另一个对象中属性的操作(读/写)

以下代码就是通过obj2来代理obj :

  1. <script>
  2. let obj = {
  3. x: 100
  4. }
  5. let obj2 = {
  6. y: 200
  7. }
  8. Object.defineProperty(obj2, 'x', {
  9. get() {
  10. return obj.x
  11. },
  12. set(value) {
  13. obj.x = value
  14. }
  15. })
  16. console.log(obj2.x); // 100
  17. obj2.x = 300
  18. console.log(obj.x); // 300
  19. </script>

 

3 Vue中的数据代理


总结:

            1. Vue中的数据代理:

                通过vm对象来代理data中的属性的操作 (读/写)

            2.Vue中数据代理的好处:

                更加方便地操作data中地数据

            3.基本原理:

                通过Object.defineProperty()把data中所有属性添加到vm上,

                为每一个添加到vm上的属性,都指定一个 getter和setter,

                在getter/setter内部去操作data中对应的属性

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/91113
推荐阅读
相关标签
  

闽ICP备14008679号