首页 > 其他分享 >【Vue】定义配置方法&数据代理

【Vue】定义配置方法&数据代理

时间:2023-09-20 21:32:11浏览次数:41  
标签:Vue 定义 get age 代理 person 属性

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>

【Vue】定义配置方法&数据代理_数据

image-20230812002421058

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

【Vue】定义配置方法&数据代理_数据_02

image-20230812003530814

writable:true

【Vue】定义配置方法&数据代理_Vue_03

image-20230812003444218

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

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

【Vue】定义配置方法&数据代理_数据_04

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会显示出值,它们都是数据代理,可以更改内容

【Vue】定义配置方法&数据代理_数据_05

image-20230813001425128

索奇问答

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

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

【Vue】定义配置方法&数据代理_Vue_06

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

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

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

标签:Vue,定义,get,age,代理,person,属性
From: https://blog.51cto.com/u_16088329/7543420

相关文章

  • Vue-基本语法及事件绑定
    一.基本语法v-bind绑定:双大括号不能在HTMLattributes中使用。想要响应式地绑定一个attribute,应该使用 v-bind 指令代码展示:<divid="app"><spanv-bind:title="message"v-html="tips"></span></div><script>letvue=newVue(......
  • 自定义读取指定目录下下文件
    publicclassPropertiesUtil{privatestaticfinalStringPath="config/param.properties";/***读取配置文件中key的对应值*/publicstaticStringqueryValue(Stringkey){if(StringUtils.isBlank(key))return"";......
  • vue样式穿透
    本文转载自https://www.jb51.net/article/253428.htm#_label0,转载仅供学习使用.scoped属性我们在vue组件写样式一般是在<style>标签里面,但是我们在这里的样式默认是全局样式,如果其它组件的class名取重复了则会导致样式污染。所以vue支持在<style>标签添加scoped属性,这样当前组......
  • 15-Vue核心-列表过滤和列表排序
    列表过滤 监视属性,实现列表过滤<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>基本列表</title><!--引入Vue--><scripttype="text/javascript......
  • C#(6):方法的定义、调用与调试
    复用:自顶向下,逐步求精,面向过程,隐藏复杂的逻辑形参是变量,实参是值。将实参赋给形参。()也是一种构造器当创建类时没有创建构造器,系统会自动创建默认构造器。当创建构造器后,强制类型会使默认构造器失效,此时需要在构造器中赋值。构造器的内存原理:栈分配时由高到低分配地址,直......
  • golang 实现 socks5 正向代理服务器
    socks5proxy.gopackagemainimport("encoding/binary""errors""flag""fmt""io""net""strconv")varportintfuncmain(){flag.IntVar(&port,......
  • Hyperledger Fabric 2.5.4开发之“定义功能需求”问题
    说明本文描述了一个不再使用“系统通道”的网络(以前该通道由排序服务引导,并且由排序服务专门控制)。自Fabricv2.3发布以来,在创建通道的过程方法中,使用系统通道现在被视为遗留方案。在通道配置(在通道的最新配置区块中找到)中,可以为每个通道定义功能需求。通道配置包含三个位置,每个位......
  • 宏定义(Release/Debug)
    #defineLOG(x)std::cout<<"Hello"<<std::endl;在项目属性的c++->Preprocesser(预处理)->PreprocesserDefine中添加DR_MODULE,将configuration模式调为release#ifdefDR_MODULE#defineLOG(x) #else#defineLOG(x) std::cout<<"Hello&......
  • vuejs+antv-g6绘制图表
    该内容包括antv-g6官网地址、antv-g6的基本使用(包括自定义节点、常用插件(右键菜单等)、基本事件、目前我所遇到的一些需求)。1、antv-g6的官网地址:https://g6.antv.antgroup.com/examples2、安装antv-g6组件npminstall@antv/g6 3、创建antvView.vue文件使用antv/g6......
  • Ant Design Vue 中的tab组件中,获取不到$ref
    问题:在tab的组件中引入了一个组件,在页面渲染时,需要用到子组件bpmnModeler里面的方法,调用this.$ref.bpm的时候报错了,找不到bpm<a-tab-panekey="3"tab="流程图"><divclass="search"><a-card><a-rowstyle="positi......