FE_Vue学习笔记 - 数据代理

news2024/11/17 3:57:11

Vue中的数据代理是一种机制,通过它,Vue实例(vm)可以代理其数据对象(data)中的属性操作。这种代理的原理主要是通过Object.defineProperty()方法,将data对象的每个属性都添加到vm对象上,并为这些属性定义getter和setter方法。在getter和setter内部,我们可以进行对data中对应属性的读取和修改。通过这种方式,Vue实例可以方便地代理其数据对象中的属性操作,避免了直接操作data对象,简化了代码并提高了可维护性。

让我们用一个简单的案例来解释这个原理。

首先,我们创建一个简单的Vue实例,其数据对象(data)包含一个属性(name):

const vm = new Vue({  
  data: {  
    name: '孙悟空'  
  }  
});

在这个实例中,我们可以使用Object.defineProperty()方法,将data对象中的name属性代理到vm对象上:

const vmProxy = new Proxy(vm, {  
  get(target, key) {  
    if (key in target.data) {  
      return target.data[key];  
    } else {  
      return target[key];  
    }  
  },  
  set(target, key, value) {  
    if (key in target.data) {  
      target.data[key] = value;  
    } else {  
      target[key] = value;  
    }  
  }  
});

在这个代理中,get和set方法被定义成对target(原始vm对象)和target.data的属性进行访问和修改。因此,当我们访问vmProxy对象的name属性时,实际上是在访问vm对象的data对象的name属性:

console.log(vmProxy.name);  // 输出 '孙悟空'

如果我们修改vmProxy对象的name属性,那么也会修改vm对象的data对象的name属性:

vmProxy.name = '猪八戒';  
console.log(vm.data.name);  // 输出 '猪八戒'

这就是Vue中的数据代理的基本原理。通过这种方式,Vue实例可以方便地代理其数据对象中的属性操作,使得我们不需要直接操作data对象,简化了代码并提高了可维护性。同时,通过getter和setter方法,我们还可以实现数据的双向绑定,使得数据的修改更加方便。

<body>
<div id="app">
    <h2>姓名:{{ name }}</h2>
    <h2>性别:{{ sex }}</h2>
</div>
</body>

<script>
    Vue.config.productionTip = false;

    const vm = new Vue({
        el: '#app',
        data: {
            name: '张三',
            sex: '男'
        }
    })
</script>
</html>

此时,在控制台输出vm,可以看到,属性都做了数据代理,也就是通过getter和setter访问,而data中的数据,又是通过_data拿到的,修改data中的属性,也需要经过_data,也就是说_data其实就是data的数据代理:
在这里插入图片描述

Vue中的数据代理是通过vm对象来代理data对象中属性的操作(读/写)。在Vue实例化时,会将data对象中的所有属性收集到vm._data中,属性值不再直接给出,而是通过响应式getter获取,当data中数据改变时,就会调用响应式setter,导致重新解析模板,然后生成新的虚拟DOM进行新旧DOM对比,最后更新页面。因此,通过vm._data可以获取到代理后的data对象数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1012245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年8月京东洗衣机行业品牌销售排行榜(京东数据挖掘)

鲸参谋监测的京东平台8月份洗衣机市场销售数据已出炉&#xff01; 根据鲸参谋平台的数据显示&#xff0c;8月份&#xff0c;京东平台上洗衣机的销量共计117万&#xff0c;环比增长约5%&#xff0c;同比下降约8%&#xff1b;销售额为18亿&#xff0c;环比下降约2%&#xff0c;同…

使用SimpleDateFormat类的示例文档

以下是Java中使用SimpleDateFormat类的示例文档&#xff1a; 示例 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date;public class Main {public static void main(String[] args) {String dateStr…

遥感数据与作物模型同化应用:PROSAIL模型、DSSAT模型、参数敏感性分析、数据同化算法、模型耦合、精度验证等主要环节

查看原文>>>遥感数据与作物模型同化实践技术应用 基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具&#xff0c;可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系&#xff0c;为不同条件下作物生长发育及…

【C++】哈希表的实现

哈希是什么理解哈希哈希所用的容器计算key值方法哈希的插入和查找解决哈希冲突闭散列也叫开放寻址法开散列 哈希闭散列实现闭散列结构闭散列结构插入闭散列查找闭散列删除 哈希开散列实现&#xff08;链表式&#xff09;开散列结构开散列结构插入开散列结构查找开散列结构删除 …

事件循环,还在微任务宏任务?过时了,快看看新版浏览器事件循环event loop(message loop)

浏览器的进程模型 进程&#xff1a;程序运⾏需要有它⾃⼰专属的内存空间&#xff0c;可以把这块内存空间简单的理解为进程。每个应⽤⾄少有⼀个进程&#xff0c;进程之间相互独⽴&#xff0c;即使要通信&#xff0c;也需要双⽅同意。 线程&#xff1a;有了进程&#xff0c;就…

【机器学习习题】估计一个模型在未见过的数据上的性能

您提到的不等式是统计学中的泛化误差界&#xff08;generalization error bound&#xff09;&#xff0c;它用于估计一个模型在未见过的数据上的性能。这个不等式是由Hoeffding不等式和Union Bound组合而成的。在这个不等式中&#xff0c;我们有以下符号&#xff1a; - P[|E_i…

Linux安装JDK1.8并配置环境变量

Linux安装JDK并配置环境变量Linux安装JDK并配置环境变量Linux安装JDK并配置环境变量 一、查询已有JAVA环境版本信息 java -version 二、下载Oracle JDK安装包 https://www.oracle.com/java/technologies/downloads/archive/ 三、安装 配置JDK 以下方式适用于安装各版本JDK&…

第一届电子纸产业创新应用论坛

自从2004年索尼推出全球首款电子纸的应用产品——电纸书阅读器以来&#xff0c;20年间&#xff0c;在各个领域&#xff0c;涌现出众多优秀的电子纸的创新应用&#xff0c;如电子价签、手写本、手机、笔记本、显示器、电子公交站牌等&#xff0c;形成电子纸产业持续蓬勃发展的强…

Java“牵手”义乌购商品详情数据,义乌购商品详情接口,义乌购API接口申请指南

义乌购隶属浙江义乌购电子商务有限公司旗下网站。该平台定位为依托实体市场&#xff0c;服务实体市场&#xff0c;以诚信为根本&#xff0c;将7万网上商铺与实体商铺一一对应绑定&#xff0c;为采购商和经营户提供可控、可信、可溯源的交易保障。 义乌购平台现有商铺商品、市场…

Jmeter系列-控制器Controllers的介绍(8)

Controllers 简介 JMeter是一款功能强大的性能测试工具&#xff0c;而控制器是JMeter中非常重要的一个组件。控制器用于控制测试计划的执行流程&#xff0c;可以根据需求来控制线程的启动、停止、循环等操作。 Jmeter有两种类型的控制器&#xff1a;Samplers&#xff08;取样…

Tomcat架构设计及组件详解

继Tomcat配置详解&#xff08;Tomcat配置server.xml详解&#xff09;Tomcat配置详解&#xff08;Tomcat配置server.xml详解&#xff09;_tomcat xml配置https://blog.csdn.net/imwucx/article/details/132166738文章之后&#xff0c;深入的学习tomcat相关知识&#xff0c;对Tom…

电子会计档案怎么管?电子凭证怎么入账归档?泛微文书定帮您解决

随着数字经济的发展&#xff0c;会计档案领域关键政策不断推进&#xff0c;逐渐向数字化发展。 2015年12月&#xff0c;财政部、国家档案局令第79号《会计档案管理办法》&#xff1a;确定电子会计档案的概念和管理要求&#xff0c;明确会计档案可仅以电子形式归档保存。 2020…

3D医学影像PACS系统源代码

一、系统概述 3D医学影像PACS系统&#xff0c;它集影像存储服务器、影像诊断工作站及RIS报告系统于一身,主要有图像处理模块、影像数据管理模块、RIS报告模块、光盘存档模块、DICOM通讯模块、胶片打印输出等模块组成&#xff0c; 具有完善的影像数据库管理功能&#xff0c;强大…

混合项目管理:如何成功地整合传统与敏捷方法?

若你尚未涉足于混合项目管理这一领域&#xff0c;且暗自以为其难以捉摸、令人费解&#xff0c;我们向你承诺&#xff0c;实则并非如此。 在深入探究混合项目管理这一主题之前&#xff0c;我们先澄清几项基础但关键的专业术语。在当今这个商业竞争愈发激烈的环境中&#xff0c;项…

4G网络广播模块 4G网络广播开发模块

SV-6209 4G网络广播模块 4G网络广播开发模块 一、描述 SV-6209网络音频模块是一款带2*40W功放输出的4G广播音频模块&#xff0c;采用高性能ARM处理器及专业Codec&#xff0c;能接收4G广播音频数据流&#xff0c;转换成音频模拟信号输出。带有一路line in输入&#xff0c;通过外…

jmeter生成html格式接口自动化测试报告

jmeter自带执行结果查看的插件&#xff0c;但是需要在jmeter工具中才能查看&#xff0c;如果要向领导提交测试结果&#xff0c;不够方便直观。 笔者刚做了这方面的尝试&#xff0c;总结出来分享给大家。 这里需要用到ant来执行测试用例并生成HTML格式测试报告。 一、ant下载安…

linux安装sqoop

一 解压安装包 这里提供了网盘资源 链接: https://pan.baidu.com/s/1QkFqVnlvuOJ_aB2bjn-OKg?pwducsy 提取码: ucsy 这里有两个压缩包&#xff0c;sqoop-1.4.7.tar.gz是 sqoop 的安装包&#xff0c;另一个是我们需要里面的一些 jar 包 解压 安装包 tar -zxf ./sqoop-1.4.7.t…

【自动驾驶】PETR 环境安装与测试

1.环境安装 该工程依赖MMCV&#xff0c; MMDetection&#xff0c; MMDetection3d&#xff0c;MMSegmentation Install MMCV pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.htmlexamples&#xff1a; pip install…

VR全景展示的功能有哪些?你了解多少?

VR全景展示作为一种全新的视觉体验技术&#xff0c;能够为人们带来强烈的视觉效果以及沉浸式的观感&#xff0c;在旅游、房地产、车展、博物馆等都有着十分广泛的应用。这种富媒体技术&#xff0c;具有很好的交互性和沉浸感&#xff0c;能够带给大家更好的体验&#xff0c;那么…

为什么选择事件驱动的微服务架构?

在当今动态的业务环境中&#xff0c;开发人员面临越来越大的压力&#xff0c;需要提供快速、可靠、可扩展的解决方案&#xff0c;以满足不断变化的业务需求&#xff0c;而事实证明&#xff0c;传统应用程序是实现这些目标的障碍。微服务提供了一种易于理解且有前途的替代方案&a…