当前位置: 首页 > 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对象的属性名命名的时候,不能以_或$开始。

相关文章:

  • 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--双主架构如何避免回环复制
  • 刘非履新浙江省委常委、杭州市委书记,曾在吉湘云多省任职
  • 网络达人“拿”别人的视频为自己带货赚佣金,法院判决赔偿1.4万元
  • 《我的后半生》:人生下半场,也有活力重启的可能
  • 青海一只人工繁育秃鹫雏鸟破壳后脱险成活,有望填补国内空白
  • 美官员称与乌克兰会谈富有成效,但仍存重大分歧
  • 《哪吒之魔童降世》电影版权方诉《仙侠神域》游戏运营方侵权案开庭