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-数据代理的更多相关文章

  1. vue的数据代理

    1. vue数据代理: data对象的所有属性的操作(读/写)由vm对象来代理操作2. 好处: 通过vm对象就可以方便的操作data中的数据3. 实现: 1). 通过Object.defineProp ...

  2. vue中的数据代理原理

    const vm = new Vue({ data:{ name:'boos' } }) // 注意 :使用构造函数构建vue实例时,传入的是一个option对象,它包含了data,computed等 ...

  3. es6中的Proxy和vue中的数据代理的异同

    1:概述 1-1:Proxy 用于修改某些操作的默认行为,Proxy可以说在对对象进行各种访问或者操作的时候在外层进行一层拦截,在操作之前都需要经过这种拦截.proxy返回的是一个新对象,可以通过操作 ...

  4. 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. 基础知 ...

  5. 【学习笔记】剖析MVVM框架,简单实现Vue数据双向绑定

    前言: 学习前端也有半年多了,个人的学习欲望还比较强烈,很喜欢那种新知识在自己的演练下一点点实现的过程.最近一直在学vue框架,像网上大佬说的,入门容易深究难.不管是跟着开发文档学还是视频教程,按步骤 ...

  6. Vue 数据响应式原理

    Vue 数据响应式原理 Vue.js 的核心包括一套“响应式系统”.“响应式”,是指当数据改变后,Vue 会通知到使用该数据的代码.例如,视图渲染中使用了数据,数据改变后,视图也会自动更新. 举个简单 ...

  7. 对数据劫持 OR 数据代理 的研究------------引用

    数据劫持,也叫数据代理. 所谓数据劫持,指的是在访问或者修改对象的某个属性时,通过一段代码拦截这个行为,进行额外的操作或者修改返回结果.比较典型的是 Object.defineProperty() 和 ...

  8. 数据代理Object.defineProperty()

    数据代理: 通过一个对象代理对另一个对象中属性的操作(读/写) 数据代理 Object.defineProperty() Object.defineProperty() 方法会直接在一个对象上定义一个 ...

  9. 一探 Vue 数据响应式原理

    一探 Vue 数据响应式原理 本文写于 2020 年 8 月 5 日 相信在很多新人第一次使用 Vue 这种框架的时候,就会被其修改数据便自动更新视图的操作所震撼. Vue 的文档中也这么写道: Vu ...

  10. 8_vue是如何进行数据代理的

    在了解了关于js当中的Object.defineProperty()这个方法后,我们继续对vue当中的数据代理做一个基于现在的解析 建议观看之前先了解下js当中的Obejct.defineProper ...

随机推荐

  1. git技能树总结

    1. git简介 版本控制: 指的是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.版本控制系统发展可分三个阶段:本地版本控制系统 -> 集中式版本控制系统 -> 分布 ...

  2. linux 软链接 硬链接 区别

    来源  https://www.cnblogs.com/oceanftd/p/13475643.html 相关概念: 链接:简单说,链接就是一种文件共享的方式,是POSIX中的概念,主流文件系统都支持 ...

  3. usb 2.0 high speed resetting signaling.

  4. 实用的JavaScript技巧

    1.数组去重 let arr = [...new Set([1,2,3,2,1])]; //输出:[1, 2, 3] 2.删除数组中的虚值(undefined .null.NaN.0 .'' .fal ...

  5. 处理GET和POST的中文乱码问题

    一.doGet 1.先获取iso的错误字符串 2.回退.重编(用UTF-8) String name = request.getParameter("username"); byt ...

  6. 小程序Day01

    注册一个微信小程序账号测试号不能用云开发 构建npm(下载node.js) npm i @vant/weapp -S --production if wrong npm init//npm intal ...

  7. python multiprocessing多进程 cannot pickle '_io.TextIOWrapper' object

    Python 3.9.6 在windows下使用multiprocessing多进程报如下错误,但linux下正常 Traceback (most recent call last): File &q ...

  8. django的注意事项

    1 允许 0.0.0.0:8000 ALLOWED_HOSTS = ['*']     2 py文件的import ,要新建一个文件夹 如tool,与manage.py同级 再去导入

  9. 浅谈JS输出中的“+”作用问题

    背景(问题) web前端考试有这么一道题目(为了阅读方便和应文章的景,小编将题目进行了微调) <input type="number" value="1" ...

  10. Double NaN

    import java.math.BigDecimal; import java.math.RoundingMode; public class Test { public static void m ...