首页 > 其他分享 >Vue 2x 系列之(六)数据代理

Vue 2x 系列之(六)数据代理

时间:2024-02-28 12:57:19浏览次数:21  
标签:Vue 对象 Object 2x 代理 defineProperty 属性

数据代理

1. Object.defineProperty【ES6中的知识点】

用于给一个对象添加/定义属性,可以对追加的属性进行很多高级的限制【比如控制属性是否可以枚举、修改、删除】

Object.defineProperty方法在Vue中的应用

  • 数据劫持
  • 数据代理
  • 计算属性

Object.defineProperty方法的几个参数:

给哪个对象添加属性【对象】、要添加的属性名【属性名】、配置项【配置对象】

配置项有哪些:

  • value:指定要添加的属性对应的值

  • enumerable:控制属性是否可以枚举,默认值是false

  • writable:控制属性是否可以被修改,默认值是false

  • configurable:控制属性是否可以被删除,默认值是false

  • get:当有人读取person的age属性时,get函数(getter)就会被调用,且返回值就是age的值

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

    set(value){
    	console.log('有人修改了age属性,且值是',value)
    	number = value
    }
    

注:通过Object.defineProperty方法可以实现对象中的某个属性和一个变量的值进行绑定,属性的值改变,变量的值就改变,变量的值改变,属性的值也会相应的改变

遍历对象的方法:

  • console.log(Object.keys(对象))
  • forin:foin不仅可以遍历对象,还可遍历数组

特点:

  1. 默认情况下,用Object.defineProperty方法为对象添加的属性是不可枚举的【不参与遍历】
  2. 默认情况下,用Object.defineProperty方法为对象添加的属性是不可修改的
  3. 默认情况下,用Object.defineProperty方法为对象添加的属性是不可删除的

2. 何为数据代理

​ 首先有两个对象,A和B,以B代理A为例,通过读/写B中的属性可以实现读/写A中属性的值【实际上就是代理对象实现了代替被代理对象读取/修改被代理对象属性值的功能】

​ 一句话总结:

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

<script type="text/javascript">
	let a = {
		x: 100
	}
	
	let b = {
		z: 200
	}
	
	Object.defineProperty(b, 'x', {
		get(){
			return a.x
		},
		
		set(value){
			a.x = value
		}
	})
</script>

3. Vue中的数据代理

对象的简写形式

https://www.yisu.com/zixun/668320.html

https://www.cnblogs.com/w-sir/p/15139039.html

Vue实例对象身上以及Vue原型对象上的所有属性和方法都可以在模板中使用

1.Vue中的数据代理:
			通过vm对象来代理data对象中属性的操作(读/写)
2.Vue中数据代理的好处:
			更加方便的操作data中的数据,没有数据代理的话也能操作,但是比较麻烦
3.基本原理:
			通过Object.defineProperty()把data对象中所有属性添加到vm上。
			为每一个添加到vm上的属性,都指定一个getter/setter。
			在getter/setter内部去操作(读/写)data中对应的属性。

标签:Vue,对象,Object,2x,代理,defineProperty,属性
From: https://www.cnblogs.com/wzzzj/p/18039944

相关文章

  • Vue 2x 系列之(五)理解MVVM
    理解MVVMMVVM模型 1.M:模型(Model):data中的数据 2.V:视图(View):模板代码 3.VM:视图模型(ViewModel):Vue实例观察发现: 1.data中所有的属性,最后都出现在了vm身上。 2.vm身上所有的属性及Vue原型上所有属性,在Vue模板中都可以直接使用。把开发人员从繁琐的DOM......
  • Vue 2x 系列之(四)数据绑定
    数据绑定Vue中有2种数据绑定的方式: 1.单向绑定(v-bind):数据只能从data流向页面。 2.双向绑定(v-model):数据不仅能从data流向页面,还可以从页面流向data。【通俗:数据变,页面变;页面变,数据变】 备注: 1.双向绑定一般都应用在表单类【输入类,有value属性的标签才可以用,因为v-mode......
  • Vue 2x 系列之(三)模板语法
    模板语法容器里的代码被称为【Vue模板】,模板语法就是指模板的代码中可以写哪些Vue语法【类似:{{name}}】插值语法:把指定的值放在指定的位置。插值语法往往用于指定标签体内容。指令语法:Vue指令所在的属性值会作为JavaScript表达式执行v-bind:用于给标签中的任意一个属性动态的......
  • Vue 2x 系列之(一)简介
    Vue简介1.Vue是什么?一套用于构建用户界面的渐进式JavaScript框架。​ 构建用户界面:将拿到的数据通过某种办法变成用户可以看到的界面。​ 渐进式:从一个轻量而又小巧的核心库逐渐递进到使用各式各样的Vue插件库【Vue可以自底向上逐层的应用】2.谁开发的?React、Angular3.......
  • PCDN边缘计算盒子X86机顶盒路由器,边缘计算源头厂家代理加盟
    自主研发核心算法,跑量好,收益高!专注于大数据处理、云计算服务的科技创新型平台服务商,作为源头厂家,可根据客户需求提供边缘计算一站式解决方案:软硬件开发、CDN各大云厂商业务直签,业务成熟稳定,资源变现快。成本低,方案多,效率高。PCDN代理加盟,电话/微信:13540308877PCDN(PeertoPeer......
  • SpringBoot 2x 系列之(七)web场景
    web场景1.SpringMVC自动配置概览SpringBootprovidesauto-configurationforSpringMVCthatworkswellwithmostapplications.(大多场景我们都无需自定义配置)Theauto-configurationaddsthefollowingfeaturesontopofSpring’sdefaults:InclusionofCont......
  • SpringBoot 2x 系列之(五)开发技巧
    开发技巧1.Lombok1.应用场景简化JavaBean的开发帮我们在编译时生成get、set、toString方法2.安装及使用引入依赖【SpringBoot已经做了版本仲裁】<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></depende......
  • SpringBoot 2x 系列之(四)自动配置
    自动配置1.引导加载自动配置类见SpringBoot1.md一、SpringBoot入门4.2主程序类,主入口类【自动配置原理】1.1@SpringBootConfiguration见SpringBoot1.md一、SpringBoot入门4.2主程序类,主入口类【自动配置原理】[email protected]@AutoConfi......
  • SpringBoot 2x 系列之(三)容器功能
    容器功能1.组件添加1.1@Configuration结合@Bean注册组件@Configuration见[email protected]@Component、@Controller、@Service、@Repository见Spring.md相关内容1.3@ComponentScan见[email protected]@Import见Spring.md8.......
  • SpringBoot 2x 系列之(二)SpringBoot特点
    SpringBoot特点1.依赖管理特性SpringBoot已经为我们做了版本仲裁,那么如果我们要修改已经做了版本仲裁的依赖,比如mysql驱动的依赖,该怎么做呢?查看spring-boot-dependencies里面规定的当前依赖版本用的properties属性在当前项目里面重新配置<properties><mysql.versi......