首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    nextTick的理解和作用

    场景说明 最近使用Vue全家桶做后台系统的时候,遇到了一个很奇葩的问题:有一个输入框只允许输入数字,当输入其它类型的数据时,输入的内容会被重置为null。为了实现这一功能,使用了一个父组件和子组件。...这个顺序一理,我们就发现了输入框展示abc不置空的原因:原来form.a的值在主线程中间虽然发生了变化,但是最开始到最后始终为null。也就是说,子组件的props的value没有发生变化。...else { this.deep = this.user = this.lazy = this.sync = false; } this.cb = cb; this.id = ++uid...随后主线程执行了form.a=null,再次触发了setter。由于都是form.a注册的,在推入微任务队列前会去重,避免watch的回调多次执行。...在加入$nextTick函数以后,在form.a=null之前先执行了nextTick函数,nextTick函数执行了watcher的回调函数的包裹函数,此时form.a的值为abc,旧的值和新的值不一样

    83720

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

    ,而defineReactive函数在walk函数内部,依次找到源头是Observer类....那么说到假如value是数组的话,调用observeArray方法遍历数组,末尾还调用了observe函数,那到底这个函数有什么用呢?...回到上文,数组说完了,那么来说对象的函数walk调用,我们看到直接是调用了defineReactive函数,那我们来一探究竟:// 定义响应式对象, 给对象动态添加get set拦截方法,export...this.depIds.has(id)) { dep.addSub(this) } } }我们在Dep中可以看到Dep在一开始定义了一个全局属性Dep.target,在新建...watcher是,这个属性为null,而在watcher的构造函数中最后会执行自己的get()方法,进而执行pushTarget(this)方法:// 将watcher实例赋值给Dep.target,用于依赖收集

    52640

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

    ,而defineReactive函数在walk函数内部,依次找到源头是Observer类 ....那么说到假如value是数组的话,调用observeArray方法遍历数组,末尾还调用了observe函数,那到底这个函数有什么用呢?...回到上文,数组说完了,那么来说对象的函数walk调用,我们看到直接是调用了defineReactive函数,那我们来一探究竟: // 定义响应式对象, 给对象动态添加get set拦截方法, export...this.depIds.has(id)) { dep.addSub(this) } } } 我们在Dep中可以看到Dep在一开始定义了一个全局属性Dep.target...,在新建watcher是,这个属性为null,而在watcher的构造函数中最后会执行自己的get()方法,进而执行pushTarget(this)方法: // 将watcher实例赋值给Dep.target

    49410

    《你不知道的JavaScript》-- 对象(笔记)

    1.2 类型 在JavaScript中共有六种主要(语言)类型:string、number、boolean、null、undefined和object。...null有时会被当作一种对象类型,这其实只是语言本身的一个bug,即对null执行 typeof null 时会返回字符串“object”,实际上null本身是基础类型。...不同的对象在底层都表示为二进制,在JavaScript中二进制前三位都为0的话会被判断为object类型,null的二进制表示全是0,自然前三位也是0,所以执行typeof时会返回“object”。...以上方法创建的都是浅不变性,即它们只会影响目标对象和它的直接属性,如果目标对象引用了其他对象(数组、对象、函数等),其他对象的内容不受影响,依然可变。...在ES5中可以使用getter和setter部分改写默认操作,但是只能应用在单个属性上,无法应用在整个对象上。

    81620

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

    null const targetStack = [] // 在需要进行依赖收集的时候调用,设置 Dep.target = watcher export function pushTarget (target...getter.call(obj) : val       /**        * Dep.target 为 Dep 类的一个静态属性,值为 watcher,在实例化 Watcher 时会被设置        ...be pushed   // as we run existing watchers   // for 循环遍历watcher队列,依次执行watcher的run方法   /**    * 这里直接使用了...     */     this.id = ++uid // uid for batching     this.active = true     /**      *  懒      */     ...,this.key       /**        * this.getter = function() { return this.xx }        * 在 this.get 中执行 this.getter

    45110
    领券