vue中的数据代理

一、理解Object.defineProperty方法

Object.defineProperty(obj, prop, descriptor)
obj:就是我们需要定义属性的对象

prop:我们需要定义的属性

descriptor:属性的描述描述符

返回值:返回此对象
let student= {
        name: '李四',
        sex: '男',
    }

// 我们想给student对象加一个classs属性
Object.defineProperty(person,'class',{
    	value: 2
    })

然后在控制台输出:
在这里插入图片描述但是通过这种方式设置的属性是不能被枚举的。必须进行下面的一些设置:

Object.defineProperty(student, 'class', {
    value: 2,
    // enumerable:true, //控制属性是否可以枚举,默认值是false
    // writable:true, //控制属性是否可以被修改,默认值是false
    // configurable:true //控制属性是否可以被删除,默认值是false
    }

如果我们想要通过另一个对象的属性来赋值给当前的student对象的class属性,可以这么做:

<script type="text/javascript">
    let person = {
        class: 2,
    }

    let student = {
        name: '李四',
        sex: '男',
    }
    Object.defineProperty(student, 'class', {
        //当有人读取student的class属性时,get函数(getter)就会被调用,且返回值就是class的值
        get() {
            console.log('有人读取class属性了')
            return person.class
        },

        //当有人修改student的class属性时,set函数(setter)就会被调用,且会收到修改的具体值
        set(value) {
            console.log('有人修改了age属性,且值是', value)
            person.class = value
        }

    })
</script>

然后控制台进行测试:
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/df68a36d15a44ae199d05363d5a98a25.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA54y_5rCR,size_19,color_FFFFFF,t_70,g_se,x_16
在这里插入图片描述

在这里插入图片描述
数据代理:通过一个对象代理对另一个对象中属性的操作。
通过person对象代理另一个student对象中class属性的操作就是数据代理。

二、引申到vue中就是:

1.Vue中的数据代理:
	   通过vm对象来代理data对象中属性的操作(读/写)
       通过一个对象来代理另一个对象中属性的操作(读/写)
2.Vue中数据代理的好处:
       更加方便的操作data中的数据
3.基本原理:
      通过Object.defineProperty()把data对象中所有属性添加到vm上。
      为每一个添加到vm上的属性,都指定一个getter/setter。
       在getter/setter内部去操作(读/写)data中对应的属性。

在这里插入图片描述这就是为什么我们不需要写data.name,而是直接写name
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值