【Vue】轻松理解数据代理

2023-09-20 21:12:04

hello,我是小索奇,精心制作的Vue教程持续更新哈,想要学习&巩固&避坑就一起学习叭~

Object定义配置方法

代码

引出数据代理,先上代码,后加解释

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8" />
  <title>回顾Object.defineproperty方法</title>
 </head>
 <body>
  <script type="text/JS" >
   let number = 18
   let person = {
    name:'张三',
    sex:'男', 
   }
// 它的功能是给person配置一个age属性
   Object.defineProperty(person,'age',{
    // value:18, 
    // enumerable:true, //控制属性是否可以枚举,默认值是false,f12可以看到颜色为浅色,用Object.keys(person)获取不到age的key(不可枚举)
    // writable:true, //控制属性是否可以被修改,默认值是false
    // configurable:true //控制属性是否可以被删除,默认值是false

    //当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值
    //get:function(){}=
    get(){
    // 如果不这样关联,number值不变,从上往下执行完结束,是修改不了的必须关联
     console.log('有人读取age属性了')
     return number
    },

    //当有人修改person的age属性时,set函数(setter)就会被调用,且会收到修改的具体值
    set(value){
     console.log('有人修改了age属性,且值是',value)
     number = value
    }

   })

   // console.log(Object.keys(person))

   console.log(person)
  </script>
 </body>
</html>

image-20230812002421058

image-20230812002421058

writable:false 默认false时不可以修改

image-20230812003530814

image-20230812003530814

writable:true

image-20230812003444218

image-20230812003444218

直接写进对象中是可以随意修改删除的,但加了配置项就不是随意了,想要修改删除需要配置

当加入getter时,定义的属性就会随着修改而变化,属性通过调用属性get而控制-invoke property getter

image-20230812004517285

image-20230812004517285

数据代理

通过一个对象代理对另外一个对象中属性进行修改操作

代码实现

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8" />
  <title>何为数据代理</title>
 </head>
 <body>
  <!-- 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)-->
  <script type="text/JS" >
   let obj = {x:100}
   let obj2 = {y:200}

   Object.defineProperty(obj2,'x',{
    get(){
     return obj.x
    },
    set(value){
     obj.x = value
    }
   })
  </script>
 </body>
</html>

  • get 方法中,当你读取 obj2.x 的值时,实际上会返回 obj.x 的值,因为 get 方法内部使用了 obj.x

  • set 方法中,当你设置 obj2.x 的值时,实际上会将这个值赋给 obj.x,从而修改了 obj 对象中的属性 x

在data中的数据都会走数据代理

当你在 Vue 实例的 data 选项中定义数据属性时,Vue 会自动将这些数据属性代理到 Vue 实例上

具体来说,当你在 data 中定义一个属性时,Vue 会将这个属性添加到 Vue 实例上,并且会创建一个内部的响应式数据对象,该对象会跟踪这个属性的变化然后,当你在模板中使用这个属性时,Vue 会建立一个与这个响应式数据对象的绑定,使模板可以在数据变化时自动更新

这个过程实现了数据代理的概念,即在 Vue 实例上代理了 data 中定义的属性,使你可以直接在 Vue 实例中访问这些属性,而实际上这些属性是存储在内部的响应式数据对象中的

下面点击name、age会显示出值,它们都是数据代理,可以更改内容

image-20230813001425128

image-20230813001425128

索奇问答

Q:把方法放到data中会怎样,走代理吗?

A:走代理,虽然定义的方法不应该走代理,它和数据不一样,数据是变化的,而方法是不变的,这样一定加重代码的累赘,

这样没有任何意义,setter & getter 也无处施展

所以还是老实按照正常来写,写到methods中吧

对您有用的话点个免费的赞叭~

更多推荐

HDMI 直通 ILA 调试实验

FPGA教程学习第十四章HDMI直通ILA调试实验文章目录FPGA教程学习前言实验原理程序设计实验过程实验尝试总结TODO前言HDMI输入直通到HDMI输出的显示,完成一个简单的HDMI输入输出检测。实验原理开发板HDMI输出接口芯片使用ADV7511,HDMI输入芯片采用ADV761,可以把输入的数据通过输出直接发送

【C语言】结构

结构类型声明结构变量structdata{//结构成员intmonth;intday;intyear;};//或structpoint{intx;inty;}p1,p2;//只定义了两个变量struct{inta;intb;}s1,s2;定义结构变量structdatatoday;//定义一个变量today,里面有mo

Redis-带你深入学习数据类型zset

目录1、zset有序集合2、zset相关命令2.1、添加或更新指定的元素——zadd2.2、获取有序集合zset的元素个数相关命令:zcard、zcount2.3、返回指定区间元素相关命令:zrange、arevrange、zrangebyscore2.4、删除相关命令:zpopmax、zpopmin、bzpopmax

UI设计需要学会哪些软件?优漫动游

想要学习UI设计,那么就要先学会UI设计软件,这是基础知识,学会软件后,你会发现软件以外的真正UI设计的能力,软件仅仅只是一个工具。今天这篇文章就是给予初学者正确的UI设计观念,详细的了解一下UI设计需要学会哪些软件?UI设计需要学会哪些软件?UI设计需要学会哪些软件?UI是“用户界面”的意思,UI设计涉及到的领域有:

构建自动化测试环境:使用Docker和Selenium!

随着软件开发的日益复杂和迭代速度的加快,自动化测试被越来越广泛地应用于软件开发流程中。它能够提高测试效率、减少测试成本,并保证软件质量的稳定性。在构建自动化测试环境方面,Docker和Selenium是两个非常有用的工具。下面将介绍如何使用Docker和Selenium构建自动化测试环境。一、Docker简介Docke

电商业务--技术负责人 250K*15

职位描述研发团队管理系统搭建技术管理系统架构岗位职责负责/参与到中大型负责系统的整体架构和设计;根据业务特点和行业最佳实践,设计符合多个市场物流业务需求,且具备可扩展能力的系统架构和业务架构承担团队稳定性建设工作,包括物流全球多机房调度、稳定性治理、资损防控、容灾降级等深入理解业务,强技术驱动,能够深入挖掘业务痛点,调

2023-9

内核向应用层发送netlink单播消息:nlmsg_unicast->netlink_unicast->netlink_sendskb->__netlink_sendskb->把skb链入structsock的sk_receive_queue链表中,再调用sk->sk_data_ready(sk);->sock_def

JavaScript 的面向对象基础,设计模式中的原型模式(设计模式与开发实践 P2)

文章目录1.1动态类型语言和鸭子类型1.2多态1.3封装封装数据封装实现封装类型1.4原型模式和基于原型继承的JavaScript对象系统C#原型模式JS原型模式在学习JS设计模式之前需要了解一些设计模式基础,如果不是JavaScript用户可以直接跳到设计模式篇的讲解~1.1动态类型语言和鸭子类型编程语言按照数据类型

深度分析Oracle中的NULL

【squids.cn】全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等关键点特殊值NULL意味着没有数据,它声明了该值是未知的事实。默认情况下,任何类型的列和变量都可以取这个值,除非它们有一个NOTNULL约束。此外,数据库管理系统会自动向包含在表的主键中的列添加NOT

七、【漏洞复现】YApi接口管理平台远程代码执行漏洞

七、【漏洞复现】YApi接口管理平台远程代码执行漏洞7.1、漏洞原理若YApi对外开放注册功能,攻击者可在注册并登录后,通过构造特殊的请求执行任意代码,接管服务器。7.2、影响版本YApi<=V1.92All7.3、指纹识别1.有注册登陆主页2.使用指纹识别类平台识别。7.4、漏洞复现1.注册账号2.新建项目-名称随意

uniapp引入小程序原生插件

怎么在uniapp中使用微信小程序原生插件,以收钱吧支付插件为例1、在manifest.json里的mp-weixin中增加插件配置"mp-weixin":{"appid":"你的小程序appid","setting":{"urlCheck":false},"usingComponents":true,//在下面配置插

热文推荐