当前位置: 首页 > news >正文

Vue 的数据代理机制

2025/4/22

向 

一、什么是数据代理机制

通过访问代理对象的属性,来间接访问目标对象的属性,数据代理机制的实现需要依赖Object.defineProperty()方法。

如下所示:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script><title>初识VM</title>
</head>
<body><div id="app"><h1>{{msg}}</h1></div><script>// 目标对象let target = {name : "apple"}// 代理对象let proxy = {}// 使用object.defineProperty 为代理对象新增属性Object.defineProperty(proxy,'name',{get : function() {return target.name},set : function(val){target.name = val}})</script></body>
</html>

建立的目标对象,代理对象,依赖Object.defineProperty()方法实现了访问访问代理对象的属性,来间接访问目标对象的属性。

二、进一步解释vm.msg

<script>const vm = new Vue({el : "#app",data :{msg : "hello vue!"}})
</script>|||| \/  
<script>let obj = {msg : "hello vue!"}const vm = new Vue({el : "#app",data : obj })
</script>

 为什么如上代码,我们可以通过vm.msg放问到该属性,为什么可以通过vm.msg访问到obj.的属性呢,其实vm就类似于是一个目标对象,vue框架会自动的把 data 选项中的属性转换为响应式属性,同时将这些属性代理到 Vue 实例上,通过Object.defineProperty()方法实现。

 三、数据代理时属性名的要求

Vue实例不会给以 _ 和 $ 开始的属性名微数据代理。为什么?

如果允许给_或$开始的属性名做数据代理的话。vm这个Vue实例上可能会出现_xxx或$xxx命名,这个属性名可能会和Vue框架自身的属性名冲突。所以在Vue当中,给data对象的属性名命名的时候,不能以_或$开始。

http://www.dtcms.com/a/148985.html

相关文章:

  • Java基础 4.22
  • js 生成pdf 并上传文件
  • 查看MySql操作日志
  • chromedp 反反爬设计方案
  • AI大模型自然语言处理能力案例演示
  • 教育科技质检的三重挑战 质检LIMS系统在教育技术研发的应用
  • Spring开发系列教程(26)——异步处理
  • Kotlin 的 suspend 关键字
  • 什么是机器视觉3D无序堆叠抓取
  • 机器学习基础 - 分类模型之决策树
  • 【AI】SpringAI 第五弹:接入千帆大模型
  • FastText 模型文本分类实验:从零到一的实战探索
  • C# AppContext.BaseDirectory 应用程序的启动目录
  • django之数据的翻页和搜索功能
  • python 脚本引用django中的数据库model
  • L2-1、打造稳定可控的 AI 输出 —— Prompt 模板与格式控制
  • Python爬虫实战:获取xie程网敦煌酒店数据并分析,为51出行做参考
  • 火语言RPA--Ftp创建目录
  • 刷题之路:C++ 解题分享与技术总结
  • Mysql--基础知识点--79.1--双主架构如何避免回环复制
  • 设备预测性维护系统部署成本:技术架构与成本优化策略解析
  • JVM虚拟机-类加载器、双亲委派模型、类装载的执行过程
  • 【MySQL高级】锁,日志
  • 子网划分的学习
  • YOLOv8 优化创新:Damo-YOLO 配合 DyHead 检测头的性能突破
  • 【无人机】问题分析。查看电机转速时,四个电机转速不一致,QGC中检测到电机转速不均衡
  • 理解字符设备、设备模型与子系统:以 i.MX8MP 平台为例
  • Redis的数据持久化是怎么做的?
  • 飞算 JavaAI 与 Spring Boot:如何实现微服务开发效率翻倍?
  • dolphinscheduler实现(oracle-hdfs-doris)数据ETL