(六)Vue之数据代理

news2024/12/23 4:10:23

文章目录

  • 回顾Object.defineProperty方法
    • 数据属性
      • value
      • enumerable
      • writable
      • configurable
    • 访问器属性
      • get()
    • set(v: any)
  • 何为数据代理
  • Vue中的数据代理

Vue学习目录

上一篇:(六)Vue之MVVC

回顾Object.defineProperty方法

Object.defineProperty方法的作用是:向对象添加特性,或修改现有特性的属性。
源码:

	declare type PropertyKey = string | number | symbol;
    interface PropertyDescriptor {
        configurable?: boolean;
         enumerable?: boolean;
         value?: any;
         writable?: boolean;
         get?(): any;
         set?(v: any): void;
     }
	defineProperty<T>(o: T, p: PropertyKey, attributes: PropertyDescriptor & ThisType<any>): T;

defineProperty有三个参数,分别是

  • 第一个参数o:类型为对象,要在其上添加或修改属性的对象。这可以是JavaScript对象(即用户定义的对象或内置对象)或DOM对象。
  • 第二个参数PropertyKey:属性名称。可以是字符串或数字或symbol类型。
  • 第三个参数: 属性描述。它可以用于数据属性或访问器属性。

数据属性

  • value:设置属性的值
  • enumerable:控制属性是否可以枚举(遍历),默认值是false
  • writable:控制属性是否可以被修改,默认值是false
  • configurable:控制属性是否可以被删除,默认值是false

value

设置属性的值

	let person = {
            name:'张三',
            sex:'男'
        }
        Object.defineProperty(person,'age',{
            value:18        
        })
        console.log(person)

请添加图片描述

enumerable

控制属性是否可以枚举(遍历),默认值是false
上面程序进行遍历:遍历不出age属性
请添加图片描述
加个enumerable属性配置:

	Object.defineProperty(person,'age',{
            value:18,
            enumerable:true
        })

遍历出age属性
请添加图片描述

writable

控制属性是否可以被修改,默认值是false
上面程序,修改age值:修改后,person的值还是原来值
请添加图片描述
加个writable属性配置

	Object.defineProperty(person,'age',{
            value:18,
            enumerable:true,
            writable:true
        })

可以修改age属性了:
请添加图片描述

configurable

控制属性是否可以被删除,默认值是false
上面程序,删除age值:删除失败
请添加图片描述
加个configurable属性配置:

	Object.defineProperty(person,'age',{
            value:18,
            enumerable:true,
            writable:true,
            configurable:true
        })

删除成功:
在这里插入图片描述

访问器属性

  • get():是一个函数,当有人访问属性时,get(getter)函数就会被调用,且返回值就是属性的值。
  • set(v: any):是一个函数,当有人修改属性时,set(setter)函数就会被调用,且会收到修改的具体值

get()

当有人访问属性时,get(getter)函数就会被调用,且返回值就是属性的值。

		let number = 18
        let person = {
            name:'张三',
            sex:'男'
        }
        Object.defineProperty(person,'age',{ 
            get:function(){
            	console.log('get被调用')
                return number
            }
        })

不去访问age属性时:
点开person,发现有age属性,但是值是(…)
在这里插入图片描述
当我们点击这(…)时,就会调用get(getter)函数
在这里插入图片描述
直接去访问age属性时也是一样:
在这里插入图片描述

set(v: any)

当有人修改属性时,set(setter)函数就会被调用,且会收到修改的具体值

		let number = 18
        let person = {
            name:'张三',
            sex:'男'
        }
        Object.defineProperty(person,'age',{
            get:function(){
                console.log('get被调用')
                return number
            },
            //可以简写
            set(value){
                console.log('set被调用')
                number = value
            }
        })

在这里插入图片描述

何为数据代理

数据代理:通过一个对象代理另一个对象中属性的操作(读/写)
例如:

	<script type="text/javascript">
        let obj1 = {x:100}
        let obj2 = {y:200}
        Object.defineProperty(obj2,'x',{
            get(){
            	console.log('get被调用')
                return obj1.x
            },
            set(value) {
            	console.log('set被调用')
                obj1.x = value
            }
        })
    </script>

在这里插入图片描述

Vue中的数据代理

通过vm(Vue)对象来代理data对象中属性的操作(读/写)

好处:更加方便的操作data中的数据

基本原理:

通过Object.defineProperty()把data对象中所有属性添加到vm上。
为每一个添加到vm上的属性,都指定一个getter/setter。
在getter/setter内部去操作(读/写)data中对应的属性。
	<div id="root">
       <h1>学校名称:{{name}}</h1>
       <h1>学校地址:{{addr}}</h1>
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false//阻止 vue 在启动时生成生产提示。
        const vm = new Vue({
            el:'#root',
            data:{
                name:'一中',
                addr:'广州'
            }
        });
    </script>

请添加图片描述
在Vue最下面还有对应的setter和getter
请添加图片描述

注意:如果打开_data会发现里面又有setter、getter,这可不是数据代理,而是Vue在里面做了数据劫持(这个以后再说),是为了让数据响应到页面进行展示。

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

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

相关文章

Chain Surfase Test - java 链表经典 OJ 面试题 - 巨细

效果图 LeetCode - 206. 反转链表 代码如下&#xff1a; /** Definition for singly-linked list. public class ListNode { int val;ListNode next;ListNode() {}ListNode(int val) { this.val val; }ListNode(int val, ListNode next) { this.val val; this.next next; …

K-Means++代码实现

K-Means代码实现 数据集 https://download.csdn.net/download/qq_43629083/87246495 import pandas as pd import numpy as np import random import math %matplotlib inline from matplotlib import pyplot as plt# 按文件名读取整个文件 data pd.read_csv(data.csv)class…

Minikube – 配置 Jenkins Kubernetes plugin

文章目录1. 配置 kubernetes credentials2. 安装 kubernets plugin3. 安装 docker 插件4. 连接 minikube 集群5. Pod template 参数6. Container template 参数7. 实例7.1 创建一个简单 pod7.2 pod name 变化7.3 指定 namespace7.4 volumes 挂载7.5 Liveness Probe 探针7.6 创建…

关于l2实时接口的功能分析

因为国内外股价的上涨都可以在界面上去查询&#xff0c;所以公司能准确地判断股价上涨&#xff0c;并适时买入、卖出&#xff0c;以此获得一定的利润。 l2实时接口还可以把以往的数据表示成一条折线&#xff0c;让公司在进行分析时更形象、更有参考意义。在连接界面后&#xf…

[附源码]Python计算机毕业设计Django校园订餐系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

星环科技TDS 2.4.0 发布: 数据开发、数据治理、数据运营套件能力再次升级

近日&#xff0c;星环科技大数据开发工具 Transwarp Data Studio 2.4.0版本重磅发布&#xff0c;新版本中数据开发、数据治理、数据运营三大套件能力全部升级&#xff0c;让数据开发更便捷、数据治理更高效、数据运营更智能。本次升级的核心能力如下&#xff1a; 数据开发套件…

【Opencv实战】高手勿入,Python使用Opencv+Canny实现边缘检测以及轮廓检测(详细步骤+源码分享)

前言 有温度 有深度 有广度 就等你来关注哦~ 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 在这次的案例实战中&#xff0c;我们将使用Python 3和OpenCV。我们将使用OpenCV&#xff0c;因为它是…

谷歌牛人发布小说式《算法图解》,竟被人扒下来,在GitHub开源了

今天给大家带来了一本算法方向的好书&#xff1a;巴尔加瓦&#xff08;Aditya Bhargava&#xff09;老师 著&#xff0c;袁国忠老师译的 《算法图解&#xff1a;像小说一样有趣的算法入门书》&#xff0c;网上有没有开源版本我不知道&#xff0c;我就看他内容不错所以推荐给大家…

蓄电池建模、分析与优化(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

[附源码]Python计算机毕业设计Django校园运动会管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

数据存储,详细讲解

✨数据存储&#xff0c;详细讲解&#x1f49c;数据类型的介绍&#xff1a;&#x1f499;整形的内存存储大小端介绍&#xff1a;&#x1f49b;浮点数的存储&#x1f49c;数据类型的介绍&#xff1a; 1.内置类型&#xff1a; char //字符数据类型&#xff08;1&#xff…

SpringBoot 之 AOP

前言&#xff1a; Spring 三大核心思想是啥&#xff0c;还记得不&#xff1f;IOC&#xff08;控制反转&#xff09;&#xff0c;DI&#xff08;依赖注入&#xff09;&#xff0c;AOP&#xff08;面向切面编程&#xff09;。回顾一下这三个东西&#xff1a; IOC&#xff1a;不考…

Dash初探:如何将Label和Dropdown放在一行

Use Dash! How to display html.Lable and dcc.Dropdown on the same line? 1、目标 下图展示了我想要实现的效果。 数据筛选部分包含了三个筛选条件&#xff1a;日期区间选择器&#xff1b;区域选择器&#xff1b;地市选择器。其中&#xff0c;地市选择器的取值和已选区域…

【1805. 字符串中不同整数的数目】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个字符串 word &#xff0c;该字符串由数字和小写英文字母组成。 请你用空格替换每个不是数字的字符。例如&#xff0c;"a123bc34d8ef34" 将会变成 " 123 34 8 34" 。注意…

[附源码]JAVA毕业设计砂石矿山管理系统(系统+LW)

[附源码]JAVA毕业设计砂石矿山管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

如何将Word转成PDF格式?这三种方法总有一个适合你

如何把Word文档转换成PDF文件格式呢&#xff1f;大家在传输文件的时候&#xff0c;相信很多小伙伴都喜欢不使用PDF文件格式&#xff0c;因为它非常的稳定&#xff0c;在浏览文件的时候格式不会乱&#xff0c;但我们都是先做好Word文档&#xff0c;然后再把它转成PDF格式&#x…

诗人贺伟陪你看世界杯

国内三大拥有转播权的主流平台&#xff08;央视、中国移动咪咕和抖音&#xff09;都已经公布了解说阵容 CCTV解说阵容 贺炜、刘嘉远、朱晓雨、曾侃、李晨明、孙思辰、邵圣懿。 此次央视世界杯采取了“单口”解说的模式&#xff0c;这多少还是会让球迷们感到错愕。以往的足球盛…

ubuntu+Docker双容器docker-compose部署Django+Vue项目(2-Django)

文章目录部署Django后端接口下载Python环境及一些尝试pip包管理运行项目容器报错1(查询容器IP解决)报错2(pvsite_uwsgi.ini文件配置socket还是http)报错3(用http先)用python manage.py runserver运行项目先报错4(下载cryptography库)回到用uwsgidjango运行成功先在uwsgidjango中…

FT2004(D2000)开发实战之PBF配置

一 PBF概述 PBF英文全称Phytium Base Firmware,PBF主要作用: 初始化PLL设置CPU主频初始化DDR4初始化PCIe控制器初始化全局中断和定时器跳转到U-boot 飞腾FT2004芯片BIOS固件由两部分构成,PBF+U-boot或者PBF+UEFI,最终的BIOS烧写⽂件由PBF固件包中的脚本程序⽣成,当然在生…

为什么消费返利模式层出不穷?这个消费返利玩法值得你借鉴

大家好&#xff0c;我是林工&#xff0c;不知道大家听说过消费返利没有&#xff1f;消费返利是互联网常见的一个商业模式&#xff0c;是指互联网平台将自己所销售的商品和服务让渡给消费者并获得一定比例的报酬&#xff0c;消费者通过平台享受到的佣金和消费总额&#xff08;金…