Vue-数据代理
Vue中的数据代理
数据代理定义
所谓数据代理,就是通过一个对象代理对另一个对象中的属性的操作(读/写)。说白了就是操作一个对象上的属性可以读取和修改另一个对象上的属性,这种关系就叫做数据代理。
在Vue中模板解析里面的数据就用到了数据代理,要想弄明白其中的原理,我们首先要了解Object对象上的defineProperty方法
Object.defineProperty()
该方法是用于给一个对象添加属性,它接收3个参数:要添加属性的对象、属性名和配置对象
const p = {
name:'luffy',
sex:'男'
}
Object.defineProperty(p,'age',{
value:18
})
console.log(p)
这样就给p对象添加了一个age属性,该属性的值为18。
第三个配置对象有一些基本属性:
enumerable 控制属性能否被枚举,默认为false
writable 控制属性能否被修改,默认为false
configurable 控制属性能否被删除,默认为false
除此之外,配置对象里还有两个高级属性get和set
let number = 18
const p = {
name:'luffy',
age:20
}
Object.defineProperty(p,'age',{
get:function(){
return age;
}
})
console.log(p)
当有人读取p对象的age属性时,get函数就会被调用,get函数的返回值就是age的值
当有人修改p对象的age属性时,set函数就会被调用,set中修改的值为所代理对象的值

有了这个函数,当我们修改了变量number的值后,p.age的值也会跟着修改

除了上面的写法之外,我们也可以用它的简写形式:
let number = 18
const p = {
name:'luffy',
age:20
}
Object.defineProperty(p,'age',{
get(){
return number;
},
set(value){
number = value
}
})
console.log(p)
我们将这两个函数称为p.age的getter和setter
set函数接收一个参数value,该值是我修改p.age所赋的值。setter中我们将value有赋值给number,所以变量number的值就会被改变,那么当我们再次读取age的时候,其值也会随之改变。

上述例子可以看到,通过使用getter和setter我们实现了用p对象上的一个属性代理变量number的值
vue中的数据代理
Vue中就是通过数据代理,将data中的数据添加到了vue对象身上
<div id="app">
</div>
<script src="../vue.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
data = {
name:'luffy',
sex:'男',
age:19
}
const vm = new Vue({
el:"#app",
data
})
</script>
当我们修改vm身上的age属性时,也修改了data中的age属性

因为vm身上的age属性是代理的data中的age属性。
这就是vue中的数据代理
Vue-数据代理的更多相关文章
- vue的数据代理
1. vue数据代理: data对象的所有属性的操作(读/写)由vm对象来代理操作2. 好处: 通过vm对象就可以方便的操作data中的数据3. 实现: 1). 通过Object.defineProp ...
- vue中的数据代理原理
const vm = new Vue({ data:{ name:'boos' } }) // 注意 :使用构造函数构建vue实例时,传入的是一个option对象,它包含了data,computed等 ...
- es6中的Proxy和vue中的数据代理的异同
1:概述 1-1:Proxy 用于修改某些操作的默认行为,Proxy可以说在对对象进行各种访问或者操作的时候在外层进行一层拦截,在操作之前都需要经过这种拦截.proxy返回的是一个新对象,可以通过操作 ...
- Vue学习之--------el与data的两种写法、MVVM模型、数据代理(2022/7/5)
文章目录 1.el与data的两种写法 1.1.基础知识 1.2.代码实例 1.3.页面效果 2.MVVM模型 2.1. 基础知识 2.2 .代码实例 2.3.页面效果 3.数据代理 3.1. 基础知 ...
- 【学习笔记】剖析MVVM框架,简单实现Vue数据双向绑定
前言: 学习前端也有半年多了,个人的学习欲望还比较强烈,很喜欢那种新知识在自己的演练下一点点实现的过程.最近一直在学vue框架,像网上大佬说的,入门容易深究难.不管是跟着开发文档学还是视频教程,按步骤 ...
- Vue 数据响应式原理
Vue 数据响应式原理 Vue.js 的核心包括一套“响应式系统”.“响应式”,是指当数据改变后,Vue 会通知到使用该数据的代码.例如,视图渲染中使用了数据,数据改变后,视图也会自动更新. 举个简单 ...
- 对数据劫持 OR 数据代理 的研究------------引用
数据劫持,也叫数据代理. 所谓数据劫持,指的是在访问或者修改对象的某个属性时,通过一段代码拦截这个行为,进行额外的操作或者修改返回结果.比较典型的是 Object.defineProperty() 和 ...
- 数据代理Object.defineProperty()
数据代理: 通过一个对象代理对另一个对象中属性的操作(读/写) 数据代理 Object.defineProperty() Object.defineProperty() 方法会直接在一个对象上定义一个 ...
- 一探 Vue 数据响应式原理
一探 Vue 数据响应式原理 本文写于 2020 年 8 月 5 日 相信在很多新人第一次使用 Vue 这种框架的时候,就会被其修改数据便自动更新视图的操作所震撼. Vue 的文档中也这么写道: Vu ...
- 8_vue是如何进行数据代理的
在了解了关于js当中的Object.defineProperty()这个方法后,我们继续对vue当中的数据代理做一个基于现在的解析 建议观看之前先了解下js当中的Obejct.defineProper ...
随机推荐
- python 删除大于超过一定时间文件
import os from datetime import datetime, timedelta path = "." if __name__ == '__main__': f ...
- Vue 事件监听
事件监听 v-on 使用v-on进行事件绑定监听,回调函数写在methods中.可以使用@的这种简写形式来代替v-on,当事件源无参数传递时,可省略括号. 语法如下所示: <button @:事 ...
- 批量检测URL中的关键词,并且将不含有关键词的URL输出到txt文件当中
编写代码时遇到的问题 写入txt(一开始忘记了tuple类型需要转换为str) 处理逻辑(一开始并没有将 body与url绑定到一起,所以或返回所有的url) 关闭太早(这点是有点疑惑的,难道不用关闭 ...
- WebSocket服务
package com.sxsoft.admin.Component; import com.alibaba.fastjson.JSON; import io.netty.handler.codec. ...
- NSQ(7)-nsq存在的问题
nsq存在的缺陷 部署的难度 nsq提供了一种消费者端进行服务发现的模型,所以无需告诉消费者去哪寻找对于的主题(Topic)在哪个nsqd实例上. 然而,它并没有提供一种方案去解决一个生产者应 ...
- win10安装MAT并单独配置jdk11
1.下载MAT 2.下载jdk11 3.配置jdk11 MAT解压后,在MemoryAnalyzer.ini配置文件开头添加配置指向jdk11,如下: -vm C:\Program Files\Jav ...
- yaml文件读取转化为类
首先你要有一个文件读取的方法,写一个根据传入路径 + 类来自动返回对应类的方法. /** * 根据传入的path,加载配置文件内容到对应class中 */ public static <T> ...
- mybatis-关联查询1-一对多关联查询
或者多表单独查询方式
- Dynamics 365 incident原生实体特点
有以下特点: customerid字段必填,而且该字段类型是"客户".可以关联多种数据类型. 更新服务用户的姓名,会更新所有关联SR的customeridName. 关闭SR会产生 ...
- sql server 与mysql差异(innodb)
MySQL SQL SERVER CHAR_LENGTH(str) LEN(character_expression) CONCAT(str1,str2,...) str1+str2 INSERT(s ...