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 ...
随机推荐
- Fiddler功能详解
编写完成日期:2021-11-22 一.原理以及注意事项 Fiddler工作原理:Fiddler 本质是一个Web代理服务器,Web 代理(Proxy Server)服务器是网络的中间实体.如上图所示 ...
- Vue中v-if和v-for一起使用时的优先级
问题:Vue2.0中v-if和v-for一起使用时报错,怎么解决呢? 代码和报错信息如下 原因和解决办法: 在处于同一节点的时候,v-for 优先级比 v-if 高.这意味着 v-if 将分别重 ...
- C++ 用同一个raw pointer传入shared_ptr构造函数生成两个智能指针有什么问题?
Effective Modern C++ Item 19: use std::shared_ptr for shared-ownership resource Now, the constructor ...
- 添加vscode到windows的右键菜单
保存为bat Windows Registry Editor Version 5.00 ; Open files [HKEY_CLASSES_ROOT\*\shell\Open with VS Cod ...
- 记录一次vue的报错
1.主要代码 <div class="hello-ezuikit-js" v-for="(item,index) in list"> <div ...
- 使用python做基本的数据处理
使用python做基本的数据处理 1.常用的基本数据结构 元组.列表.字典.集合.常用的序列函数 1.1基本操作 1.1.1 元组:逗号分开的序列值. tup = tuple (4,5,6) tup ...
- 删除v-for方法生成的组件的方法
一.思路 在vue:data中的数据对象添加布尔类型的属性,用来表明其是否被渲染,如果需要删除组件,就把这个属性设置为false: 在计算属性vue:computed中,根据该布尔属性过滤,生成一个新 ...
- cublas fp16
编译选项: nvcc 4.cpp -o test_gemm -lcudart -lcuda -lcublas -std=c++11 #include <sys/time.h> #incl ...
- 时间处理及interval函数运用
MySql时间操作1.interval的说明1.1.当函数使用时,即interval(),为比较函数,如:interval(10,1,3,5,7); 结果4:原理:10为被比较数,后面1,3,5,7为 ...
- vue编辑修改,点击取消操作时,table内的内容不变
1.父组件内 2.子组件内(使用JSON.parse(JSON.stringify(xxx值))) 进行深拷贝