Vue的data之数据代理

本文介绍了Vue中的data,它是MVVM模式中的数据模型,并详细阐述了data在Vue实例对象vm中的表现,包括_data属性和数据劫持。接着,重点讨论了data的数据代理,即Vue如何通过Object.defineProperty()将_data中的数据代理到vm实例上,使得可以直接通过this.name访问数据,而不需要使用this._data.name,简化了代码编写。此外,还提到了Object.defineProperty()在Vue中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、data是什么?

data就是Vue中装数据的地方,作为MVVM模式的M存在,它是Vue构造函数的参数对象里面的一个属性,也可以说是一个配置项。


二、data在Vue实例对象vm中是什么样的?

写一段代码:

<div id="app"></div>
<script>
    const vm = new Vue({
        el:'#app',
        data:{
            name:'zs'
        }
    })
</script>

这里的vm为Vue实例对象,一般在MVVM模型里对应VM。
运行后我们在控制台输入vm会出现vue实例对象vm。
在这里插入图片描述
点开它
在这里插入图片描述
我们看到很长一串东西,这里面有个_data,它就是Vue中的data。
点开它我们会发现这里面除了name还有一些别的东西,那些是数据劫持。
在这里插入图片描述
但是我们发现vm里也有name
在这里插入图片描述
这是怎么回事呢?


三、data的数据代理

Vue为了我们的代码编写更方便,就把data也就是_data里面的数据通过Object.defineProperty()方法进行了数据代理,复制了一样的data数据在vm下面,同时我们也会发现vm下有两个方法:
在这里插入图片描述
这里通过Object.defineProperty()方法中的getter和setter方法进行监听,当name被获取的是否getter方法触发,当name被修改时setter方法触发。

所以我们可以在Vue中通过this.name获取到name,因为它通过数据代理挂载到了vue实例对象vm下面且this指向vm。如果没有数据代理我们就要通过this._data.name获取到name,一旦data里面数据多了起来就很麻烦。


另:Object.defineProperty()方法在Vue中很多处用到,它很重要!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值