首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

请你挑战一下这几道nextTick面试题

Watcher对象调用addDep的时候,实际上是传入的Dep对象把自己当做sub添加进去,这样在Dep对象调用notify才能通知到对应的Watcher,也就是说组件的data在调用set前一定要调用...回到本题 通过源码分析我们对Vue修改视图的逻辑有了更深的认识,现在我们再回过头来看看前面的题。...题目3:虽然首先调用的赋值,但是值并没有改变,在Object.defineProperty的set方法中可以看到,如果值相同直接return了,所以本题和题目1其实是一样的,也是0。...实际上在mountComponent方法中创建Watcher时,构造方法最下面会调用Watcher的get方法,get方法不是先会调用一下pushTarget吗?..._render就会处理模板中的变量,那么模板中变量的get也就会被调用了,所以放在模板中的变量在会被收集依赖。

11610
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    vue源码分析-响应式系统工作原理_2023-03-01

    如果value是数组,就使用observeArray遍历value,对value中每一个元素调用observe分别进行观察。...如果value是对象,则使用walk遍历value上每个key,对每个key调用defineReactive来获得该key的set/get控制权。...removeSub: 与addSub对应,作用是将Watcher实例从记录依赖的数组中移除 depend: Dep.target上存放这当前需要操作的Watcher实例,调用depend会调用该 Watcher...this.depIds.has(id)) { dep.addSub(this) } } } 我们在Dep中可以看到Dep在一开始定义了一个全局属性Dep.target...,在新建watcher是,这个属性为null,而在watcher的构造函数中最后会执行自己的get()方法,进而执行pushTarget(this)方法: // 将watcher实例赋值给Dep.target

    45210

    Vue.js源码逐行代码注解src下core下observer

    * Dep.target = 当前正在执行的 watcher  * 通过调用 pushTarget 方法完成赋值,调用 popTarget 方法完成重置(null)  */ Dep.target =... null const targetStack = [] // 在需要进行依赖收集的时候调用,设置 Dep.target = watcher export function pushTarget (target...// 读取时进行的依赖收集,将dep添加到watcher中,也将watcher添加到dep中         /**          * 依赖收集,在 dep 中添加 watcher,也在 watcher... 中添加 dep          */         dep.depend()         /**          * childOb 表示对象中嵌套对象的观察者对象,如果存在也对其进行依赖收集...,this.key       /**        * this.getter = function() { return this.xx }        * 在 this.get 中执行 this.getter

    21510

    nextTick的理解和作用

    watcher实例执行了getter函数,getter函数读取了data某个属性的值,因此触发了Object.defineProperty中的get函数。...在我们说的这个例子中,就是value的watch回调函数。 讲到这里,我们发现watch的回调函数只是在这里进行了注册,还没有执行。那么,watch真正的执行是在哪里呢?...随后主线程执行了form.a=null,再次触发了setter。由于都是form.a注册的,在推入微任务队列前会去重,避免watch的回调多次执行。...到这里,主线程任务执行完成,微任务队列中watcher回调函数的包裹函数被推出执行,由于form.a的值始终都为null,因此不会执行回调函数。...在加入$nextTick函数以后,在form.a=null之前先执行了nextTick函数,nextTick函数执行了watcher的回调函数的包裹函数,此时form.a的值为abc,旧的值和新的值不一样

    78720

    Flutter 面试知识点集锦

    setter 重写 Dart 中所有的基础类型、类等都继承 Object ,默认值是 NULL, 自带 getter 和 setter ,而如果是 final 或者 const 的话,那么它只有一个...(kTabHeight + indicatorWeight); } 13、Assert(断言) assert 只在检查模式有效,在开发过程中,assert(unicorn == null); 只有条件为真才正常...Zone Dart 中可通过 Zone 表示指定代码执行的环境,类似一个沙盒概念,在 Flutter 中 C++ 运行 Dart 也是在 _runMainZoned 内执行 runZoned 方法启动...Flutter 中存在 Widget 、 Element 、RenderObject 、Layer 四棵树,其中 Widget 与 Element 是多对一的关系 , Element 中持有Widget...Flutter 中存在四大线程,分别为 UI Runner、GPU Runner、IO Runner, Platform Runner (原生主线程) ,同时在 Flutter 中可以通过 isolate

    5.2K61

    「 flutter 必知必会 」最强事件发布订阅框架方案 event_bus 全局事件总线使用解析

    三、使用 在 flutter 中使用 eventbus 主要可以归纳为如下步骤: 实例化 eventbus 定义消息 event 对象 创建监听器 发送消息 接收消息 下文我将以网络请求为例进行解析...3.1 实例化 eventbus 由于 eventbus 是可能在不同类里调用的 就比如说本文的网络请求使用 eventbus ,那么网络请求可能发生在很多歌类的代码里 所以不能将其单独在某个特定页面的类里创建...showToast 是一个三方的吐司库 可以再 dependences 中添加 fluttertoast: ^7.1.1 即可 3.4 发送消息 发送消息时只要调用 eventBus.fire(....,对于 Dart 中混合 mixin、on、with 语法陌生的同学可以看这篇文章 Flutter 知识梳理 (Dart) - implements, extends, mixin 的理解 四、总结...为了方便大家学习,我把代码上传到了 github:bilibili-workspace/flutter_eventbus_sample 如果还有疑问,或者有更好的方法,欢迎大家在评论区提出 感谢大家的三连或者关注支持

    2.1K21

    「 flutter 必知必会 」最强事件发布订阅框架方案 event_bus 全局事件总线使用解析

    三、使用 在 flutter 中使用 eventbus 主要可以归纳为如下步骤: 实例化 eventbus 定义消息 event 对象 创建监听器 发送消息 接收消息 下文我将以网络请求为例进行解析...3.1 实例化 eventbus 由于 eventbus 是可能在不同类里调用的 就比如说本文的网络请求使用 eventbus ,那么网络请求可能发生在很多歌类的代码里 所以不能将其单独在某个特定页面的类里创建...showToast 是一个三方的吐司库 可以再 dependences 中添加 fluttertoast: ^7.1.1 即可 3.4 发送消息 发送消息时只要调用 eventBus.fire(....,对于 Dart 中混合 mixin、on、with 语法陌生的同学可以看这篇文章 Flutter 知识梳理 (Dart) - implements, extends, mixin 的理解 四、总结...为了方便大家学习,我把代码上传到了 github:bilibili-workspace/flutter_eventbus_sample 如果还有疑问,或者有更好的方法,欢迎大家在评论区提出 感谢大家的三连或者关注支持

    1.2K20

    Vue 源码解析:深入响应式原理

    在 _initData 方法的最后,我们调用了 observe(data, this) 方法来对 data 做监听。observe 方法的源码定义如下: 调用 convert 方法,对 obj 的每一个属性进行转换,让它们拥有 getter、setter 方法。...前面提到了在 getter 和 setter 方法调用时会分别调用 dep.depend 方法和 dep.notify 方法,接下来依次介绍这两个方法。depend 方法的源码定义如下: 在遍历过程中,如果 token 无 tag 字段,则调用 document.createTextNode(token.value) 方法创建 DOM 节点;否则调用processTextToken(token...在多数情况下会调用 pushWatcher(this) 方法把 Watcher 实例推入队列中,延迟 this.run 调用的时机。pushWatcher 方法的源码定义如下: <!

    1.1K10

    「 Flutter 项目实战 」设计企业级项目入口 main.dart 设计与实现 ( GSYGithubApp 源码解读·二 )

    main.dart 中需要实现三个功能:异常捕获、错误页展示、主页面加载 2.1 异常捕获 - runZoned 在 Flutter 中,还无法捕获的异常,如调用空对象方法异常、Futurer 中的异常等...《Flutter 实战》中讲到:InheritedWidget 是 Flutter 中非常重要的一个功能型组件,它提供了一种数据在 widget 树中从上到下传递、共享的方式 比如我们在应用的根 widget...必知必会 」最强数据管理方案 flutter_redux 使用解析 OK,那么一个企业级项目的 main.dart 木块中该如何使用 flutter_redux 呢?...下面我们就以 GSYGitHubApp 为例,看看优秀的 app 是怎么实现的 2.4.1 创建 store 要使用 flutter_redux 来对页面进行管理,就系要实例化 store ///...,HomePage 监听到后都能统一的显示 Toast 很明显这是一个多对一的情形(多个发送方对一个接收方 HomePage),而且发送事件的逻辑是分散在不同功能模块中的,所以我们不要采用 event_bus

    1.1K21

    「 Flutter 项目实战 」设计企业级项目入口 main.dart 设计与实现 ( GSYGithubApp 源码解读·二 )

    main.dart 中需要实现三个功能:异常捕获、错误页展示、主页面加载 2.1 异常捕获 - runZoned 在 Flutter 中,还无法捕获的异常,如调用空对象方法异常、Futurer 中的异常等...《Flutter 实战》中讲到:InheritedWidget 是 Flutter 中非常重要的一个功能型组件,它提供了一种数据在 widget 树中从上到下传递、共享的方式 比如我们在应用的根 widget...必知必会 」最强数据管理方案 flutter_redux 使用解析 OK,那么一个企业级项目的 main.dart 木块中该如何使用 flutter_redux 呢?...下面我们就以 GSYGitHubApp 为例,看看优秀的 app 是怎么实现的 2.4.1 创建 store 要使用 flutter_redux 来对页面进行管理,就系要实例化 store ///...,HomePage 监听到后都能统一的显示 Toast 很明显这是一个多对一的情形(多个发送方对一个接收方 HomePage),而且发送事件的逻辑是分散在不同功能模块中的,所以我们不要采用 event_bus

    97431

    「 Dart Js Ts 」给前端工程师的一张Dart语言入场券

    小 null 最近跑去写 Flutter 了 ~ Flutter 使用 Dart 语言进行开发,小 null 在写 Flutter 的过程中发现 Dart 和 Javascript/Typescript...Dart 变量声明 // javascript var name = 'null仔' // dart var name = 'null仔' 与 Javascript 一样,在 Dart 中,我们可以使用...比如上文代码其实就是一个 String 类型对象的引用,这个对象的内容是 null 仔 。 在 Dart 中,声明一个未初始化的变量,变量的类型可以更改,它的初始值是 null。...Javascript 中很喜欢用的神器,在 Dart 中也可以用啦~嗯,真香~ spread 参数默认值与可选参数 // javascript function getInfo({name='null...Javascript 中 我们一般通过手动 "return this" 来实现链式调用,而 Dart 提供了 Cascade (级联运算符) ..

    1.5K10

    Flutter-从入门到项目 05:Dart语法快速掌握(下)

    = null){ result = "$person say : $device"; } print(result); return result; } // 函数调用 funcFunc5...(dot)来调用实例的变量或者方法。 使用 ?. 来确认前操作数不为空, 常用来替代. , 避免左边操作数为 null 引发异常。 使用 runtimeType 方法,在运行中获取对象的类型。...该方法将返回 Type` 类型的 12.2 实例化变量(Instance variables) 在类定义中,所有没有初始化的变量都会被初始化为null。...声明一个枚举类型需要使用关键字 enum : enum LGColor { red, green, blue } 在枚举中每个值都有一个 index getter 方法,它返回一个在枚举声明中从.../ 在枚举中每个值都有一个 index getter 方法,它返回一个在枚举声明中从 0 开始的位置。

    1.4K20
    领券