首页 > 编程语言 >vue2源码-二、对象响应式原理

vue2源码-二、对象响应式原理

时间:2023-04-10 19:00:22浏览次数:51  
标签:vue2 Object value 响应 源码 key data newValue 属性

// 循环对象进行一次劫持
class Observer{
constructor(value){
this.walk()
}
walk(data) {
// 重新定义属性
Object.keys(data).forEach((key) => defineReactive(data, key, data[key]))
}
}
// 属性劫持
// 对对象target,定义属性key,值为value
// 使用Object.definProperty重新定义data的属性
export function defineReactive(target, key, value) {
observe(value) // 递归对所有的属性进行劫持
Object.defineProperty(target, key, {
// 用户取值
get() {
console.log('用户设置值00')
return value
},
// 用户设置值了
set(newValue) {
console.log('用户取值了')
if (newValue === value) return
// 递归,设置了对象
observe(newValue)
value = newValue
},
})
}

标签:vue2,Object,value,响应,源码,key,data,newValue,属性
From: https://www.cnblogs.com/dgqp/p/17303968.html

相关文章

  • spring boot单库动态分表实现【增删查】(含源码)
    一.背景现实场景中当个别业务数据量过大时会影响系统功能性能,当整个业务还没有达到分库的级别时,动态分表也是一个的选择,基本思想是按照一定维度将数据分表存储动态查询。本次实现的是基于springboot的单表动态增删查,首先分表的规则根据一个格式生产,包含时间在其中,每一条数据......
  • C语言中的位运算符和源码反码补码的浅解
    位运算符【与(&);或(|);非(~);异或(^);移位运算符(<<和>>)】对于有符号(正负)的而言:1)二进制的最高位是符号位:0表示正数,1表示负数2)正数的原码,反码,补码都一样3)负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)4)负数的补码=它的反码+1 5) 0在计算机种分+0与-0,它们的原码,补码,反码......
  • 关于vue2老项目的打包优化,实现首屏加载速度提升
    分析项目代码体积yarnaddwebpack-bundle-analyzer在webpack.dev.conf.js中配置constBundleAnalyzerPlugin=require('webpack-bundle-analyzer').BundleAnalyzerPluginplugins:[newBundleAnalyzerPlugin(),//代码体积分析插件......]执行yarnrundev或......
  • 直播网站源码,接收方收到的信息等于缓冲区长度
    直播网站源码,接收方收到的信息等于缓冲区长度原因分析:实际上是创建字符串时设置获取数据包的长度不正确,长度不应使用data.length byte[]data=packet.getData();Strings=newString(data,0,data.length);​解决方案:改用packet.getLength()即可解决 publicvoid......
  • ChatGPT垂直行业私有数据知识库功能-咨询接口采用流式响应输出-JS和Golang实现流式响
    近期开发私有数据知识库功能,想要实现和ChatGPT聊天效果类似的逐字流式输出展示效果。GPT3.5本身就有流式聊天补全接口,后端Golang对接后,也需要能流式输出。下面就介绍下前端JS后端Golang来实现这种输出效果 大部分介绍是使用EventStream来实现,我现在不使用EventStream也来实现......
  • Vue2异步更新及nextTick原理
    vue官网中是这样描述nextTick的在下次DOM更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,可以获取更新后的DOM。在学习nextTick是如何实现之前,我们要先了解下JavaScript的执行机制JavaScript执行机制浏览器是多线程的,例如GUI渲染线程、JS引擎线程......
  • Collection - LinkedList源码解析
    简介:LinkedList集合底层是一个双向链表结构,具有增删快,查询慢的特点,内部包含大量操作首尾元素的方法。适用于集合元素先入先出和先入后出的场景,在队列源码中被频繁使用。链表结构的节点新增、删除都非常简单,仅仅把前后节点的指向修改下就好了,所以LinkedList新增和删除速度很......
  • SpringSecurity源码之WebSecurity构建FilterChainProxy
    主要参考了https://mp.weixin.qq.com/s/D0weIKPto4lcuwl9DQpmvQ。SpringSecurity版本是2.7.9。将SpringBoot和SpringSecurity结合使用,SpringSecurity自动配置类是SecurityAutoConfiguration.class。 @AutoConfiguration@ConditionalOnClass({DefaultAuthenticationEventPubli......
  • 爬虫最后一天,爬取到的数据存到mysql中,爬虫和下载中间件、加代理、cookie、header、se
    爬到的数据存到mysql中classFirstscrapyMySqlPipeline:defopen_spider(self,spider):print('我开了')self.conn=pymysql.connect(user='root',password="",host='127.0.0.1......
  • 【Spring专题】「技术原理」从源码角度去深入分析关于Spring的异常处理ExceptionHandl
    ExceptionHandler的作用ExceptionHandler是Spring框架提供的一个注解,用于处理应用程序中的异常。当应用程序中发生异常时,ExceptionHandler将优先地拦截异常并处理它,然后将处理结果返回到前端。该注解可用于类级别和方法级别,以捕获不同级别的异常。在Spring中使用ExceptionHandler非......