【Vue核心】6.数据代理

news2024/11/18 17:22:54

1.回顾Object.defineProperty方法

Object.defineproperty

Object.defineproperty 的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性。Object.defineproperty方法需要传递3个参数,1.属性所在的对象 2.属性的名字 3.一个描述符对象。

Object.defineproperty(obj, prop, desc )

  • 参数1:obj 需要定义属性的当前对象
  • 参数2:prop 当前需要定义的属性名
  • 参数3:desc 描述符 一般是一个对象

一般通过为对象的属性赋值的情况下,对象的属性可以修改也可以删除,但是通过Object.defineProperty()定义属性,通过描述符的设置可以进行更精准的控制对象属性。

Object.defineproperty 定义属性

1.configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性,默认值为false。

2.enumerable:表示能否通过for in循环访问属性,默认值为false

3.writable:表示能否修改属性的值。默认值为false。

4.value:包含这个属性的数据值。默认值为undefined。

5.最后还有最重要的两个属性 set和get(即存取器描述:定义属性如何被存取),这两个属性是做什么用的呢?

注意:当使用了getter或setter方法,不允许使用writable和value这两个属性(如果使用,会直接报错滴)

get 是获取值的时候的方法,类型为 function ,获取值的时候会被调用,不设置时为 undefined

set 是设置值的时候的方法,类型为 function ,设置值的时候会被调用,undefined

get或set不是必须成对出现,任写其一就可以。

代码示例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Object.defineProperty</title>
	</head>
	<body></body>
	<script type="text/javascript">

		let age = 16;
		let student = {
			no:'sn001',
			name:'小明',
			//age:16		
		};	
		console.log(Object.keys(student))
		
		Object.defineProperty(student,'age',{
			/* value:16,
			enumerable:true,//控制属性是否可以枚举,默认值是false 
			writable:true, //控制属性是否可以被修改,默认值是false 
			configurable:true ,//控制属性是否可以被删除,默认值是false
			 */
			get() {
				console.log("读取了get");
				return age;
			},
			set(value) {
				console.log("修改了value:"+value);
				age = value;
			}
		});
		console.log(Object.keys(student))
	</script>
</html>

效果图如下:

在这里插入图片描述

2.何为数据代理

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

示例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>数据代理</title>
	</head>
	<body></body>
<script type="text/javascript">

	//数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)
	let obj = {
		x: 100
	};
	let obj2 = {
		y: 200
	};
	Object.defineProperty(obj2, 'x', {
				get() {
					return obj.x
				},

				set(value) {
					obj.x = value
				}
			})
</script>
</html>

效果:

在这里插入图片描述

3.Vue中的数据代理

1.Vue中的数据代理:

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

2.Vue中数据代理的好处:

​ 更加方便的探作data中的数据

3,基本原理:

在这里插入图片描述

​ 通过object.defineProperty()把data对象中所有属性添加到vm上。
​ 为每一个漆加到vm上的属性,都指定一个getter/setter.
​ 在getter/setter内部去操作(读/写) data中对应的属性。

示例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>Object.defineProperty</title>
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<div id="root">
			<h1>name:{{name}}</h1>
		</div>
	</body>


	<script type="text/javascript">
		Vue.config.productionTip = false;
		/* 
			1.Vue中的数据代理:
				通过vm对象来代理data对象中属性的操作(读/写)
			2.Vue中数据代理的好处:
				更加方便的探作data中的数据
			3,基本原理:
				通过object.defineProperty()把data对象中所有属性添加到vm上。
				为每一个漆加到vm上的属性,都指定一个getter/setter.
				在getter/setter内部去操作(读/写) data中对应的属性。
		 */


		let data = {
			id: 1,
			name: "测试",

		}

		const vm = new Vue({
			el: '#root',
			data

		})
	</script>
</html>

效果:

在这里插入图片描述

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

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

相关文章

Wireshark TS | PMTU 问题实例

前言 PMTU&#xff0c;说到网络上的 PMTU 所能实现的功能&#xff0c;网工对它的原理自然是如数家珍&#xff0c;不熟悉的可能就感觉高大上了&#xff0c;觉得路径 MTU 能自动发现了&#xff0c;自然端到端数据包传输就能避免数据包分片了。可是理想很丰满&#xff0c;现实很骨…

防火墙NAT综合实验——nat控制,豁免,远程,DMZ区域(带命令)

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.实验 实验要求 实验命令 前言 本章将会进行NAT的综合配置…

编程零基础转行Python,往这个方向走,绝对没有错

近几年Python的受欢迎程度可谓是扶摇直上&#xff0c;当然了学习的人也是愈来愈多。一些学习Python的小白在学习初期&#xff0c;总希望能够得到一份Python学习路线图&#xff0c;小编经过多方汇总为大家汇总了一份Python学习路线图。 对于一个零基础的想学习python的朋友来说…

对造轮子Say NO!如何移植并使用Linux内核的通用链表?(附源代码)

1. 什么是链表 链表是一种常用的组织有序数据的数据结构&#xff0c;它通过指针将一系列数据节点连接成一条数据链&#xff0c;是线性表的一种重要实现方式。 相对于数组&#xff0c;链表具有更好的动态性&#xff0c;建立链表时无需预先知道数据总量&#xff0c;可以随机分配…

字节跳动技术总监整理的这份MySQL学习文档,看完才发现要学的可太多了!

对于程序员来说&#xff0c;去任何一家公司面试&#xff0c;数据库是避不开的。开发人员对MySQL掌握的越深入&#xff0c;你能做的事情就越多。 完成业务功能&#xff0c;要懂基本的Sql语句。做性能优化&#xff0c;要懂索引&#xff0c;懂引擎。做分库分表&#xff0c;要懂主从…

Head First设计模式(阅读笔记)-13.代理模式

监控糖果机 假设现在需要一台监视器去生成报告&#xff0c;报告中包括糖果机的位置、库存等信息 // 糖果机 public class GumballMachine{String loc;public GumballMachine(String loc, int count){this.loc loc;}public String getLoc(){return loc;}// 其他方法省略 } // 监…

详解Pytorch中的torch.nn.MSELoss函数(包括每个参数的分析)

一、函数介绍 Pytorch中MSELoss函数的接口声明如下&#xff0c;具体网址可以点这里。 torch.nn.MSELoss(size_averageNone, reduceNone, reduction‘mean’) 该函数默认用于计算两个输入对应元素差值平方和的均值。具体地&#xff0c;在深度学习中&#xff0c;可以使用该函数用…

玩转webpack(03):webpack进阶使用

一、自动清理构建目录 避免构建前每次都要手动删除dist 使用 clean-webpack-plugin&#xff08;默认删除output指定的输出目录&#xff09; &#xff08;1&#xff09;依赖安装 npm i clean-webpack-plugin -D &#xff08;2&#xff09;使用 --- webpack.prod.js const Cl…

基于java学生签到考勤系统

开发工具eclipse,jdk1.8 技术&#xff1a;java swing 数据库&#xff1a;mysql5.7 学生选课系统功能&#xff1a;管理员、教师、学生三个角色 一、管理员功能&#xff1a; 1.登录、修改密码、退出系统 2.学生管理&#xff1a;添加、修改、删除、查询 3.班级管理&#x…

YOLOV1算法学习记录

前言 R-CNN系列算法&#xff08;R-CNN、SPPNet、Fast R-CNN、Faster R-CNN&#xff09;均是采用two-stage的方法&#xff08;1.提取region proposal 2.分类边框回归&#xff09;&#xff0c;主要是对region proposal进行识别定位。虽然这类方法检测精度很高&#xff0c;但由于…

Leetcode番外篇——滑动窗口的应用

各位好&#xff0c;博主新建了个公众号《自学编程村》&#xff0c;拉到底部即可看到&#xff0c;有情趣可以关注看看哈哈&#xff0c;关注后还可以加博主wx呦~~~&#xff08;公众号拉到底部就能看到呦&#xff09; 我们刚刚在上一节讲述了TCP的滑动窗口。殊不知&#xff0c;它…

基于RISC-V的Copy-On-Write

为什么需要写时拷贝呢&#xff1f; 当 shell执行指令的时候会 fork()&#xff0c;而这个 fork()出来的进程首先会调用的就是 exec来执行对应的命令&#xff0c;如果我们将 fork()创建的进程对地址空间进行了完整的拷贝,那将是一个巨大的消耗 因为在实际应用中&#xff0c;for…

微信小程序框架-全面详解(学习总结---从入门到深化)

小程序与普通网页开发的区别 小程序的主要开发语言是 JavaScript &#xff0c;小程序的开发同普通的网页 开发相比有很大的相似性。对于前端开发者而言&#xff0c;从网页开发迁移 到小程序的开发成本并不高&#xff0c;但是二者还是多少有些许区别的&#xff0c;例如&#xff…

HCIP实验 4-1:路由引入与路由控制

实验 4-1 路由引入与路由控制 学习目的 掌握OSPF与ISIS相互路由引入的配置方法掌握通过地址前缀列表过滤路由信息的配置方法掌握通过Route-policy过滤路由信息的配置方法 拓扑图 场景 你是你们公司的网络管理员。公司网络中有两部分路由区域&#xff0c;一部分运行OSPF,另外…

【Proteus仿真】【51单片机】厨房天然气泄漏检测报警系统

文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用LCD1602、按键、天然气、烟雾传感器、ADC&#xff0c;报警模块等。 系统运行后&#xff0c;LCD1602显示传感器检测的天然气浓度和烟雾浓度值。 可通…

中国土地交易数据库:300w数据中国土地高频交易数据2000-2022

土地交易是土地在流通过程中多方发生的经济关系&#xff0c;土地交易的行为主要是交换的土地所有权、使用权、租赁权、抵押权等。在我国&#xff0c;土地作为一种重要资源&#xff0c;其收购储备和交易行为都由国家进行统一管理。经过改革开放几十年的探索和实践&#xff0c;土…

手机投影到电脑显示 此设备不支持miracast,因此不能以无线投影到它

在家里使用手机的体感游戏,发现手机屏幕比较小,想要将其投影到自己的笔记本电脑上,这样看得就比较大了。然后我就打开笔记本电脑,操作如下: 如下图: 原文地址:手机投影到电脑显示 此设备不支持miracast&#xff0c;因此不能以无线投影到它 - 廖强的博客 但是结果我们就看到了…

Mysql安装配置和Mysql使用六千字详解!!

目录 课前导读 一、Mysql的安装和配置 二、数据库简介&#xff1a; 1、数据库中典型代表&#xff1a; 2、数据库类型&#xff1a; 3、Mysql简介&#xff1a; 4、客户端和服务器简介&#xff1a; 三、初始MySQL 四、数据库操作 五、表的基本操作 六、表的基础增删查改…

虚拟主机、WordPress 主机和云主机之间的区别

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网站】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】&#x1f4ac; 免费且…

[附源码]JAVA毕业设计校园失物招领管理系统(系统+LW)

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