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

    源码共读-Koa

    (length)) ctx.length = length } return res.end() } // status body if (body == null) {...当一个中间件中调用next方法后会把index标记为当前的索引,如果一个中间件多次调用next方法,那么由于第一次调用是index会标记为i,那么第二次调用的时候i和index是相等的,也就是第二次的时候会走...每次调用的时候根据索引获取当前要执行的中间件函数,在第18行会执行当前中间件,并把下一个dispatch当作第二个参数next传入到下一个中间件中。...当执行到最后一个中间件的时候,设置fn = next由于Application代码的第52行并没有传递第二个参数,所以此时next是undefined,那么compose中将会走第16行if (!...如果传递了函数那么会执行传入的函数,当此函数中调用next以后,由于索引已经超过了middleware的长度,所以下次函数执行事也会走第16行的逻辑。

    37910

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

    ,动态计算队列的长度,没有缓存长度,是因为在执行现有 watcher 期间队列中可能会被 push 进新的 watcher    */   for (index = 0; index length... watcher 会被触发,访问 this.computedProperty 时也会触发 watcher  */ export default class Watcher {   vm: Component...* 因为触发更新说明有响应式数据被更新了,但是被更新的数据虽然已经经过 observe 观察了,但是却没有进行依赖收集,所以,在更新页面时,会重新执行一次 render 函数,执行期间会触发读取操作,这时候进行依赖收集...$watch 或者 watch 选项时可以传一个 sync 选项        * 当为 true 时在数据更新时该 watcher 就不走异步更新队列,直接执行 this.run        * 方法进行更新...       * 这个属性在官方文档中没有出现        */       this.run()     } else {       /**        * 更新时一般都这里,将 watcher

    63610

    【精品转载】学习 Vue 源码的必要知识储备

    我们知道 JavaScript 是弱类型的语言,所以我们在写代码的时候容易出现一些始料未及的问题。也正是因为这个问题,才出现了 Flow 这个静态类型检查工具。...其实 Vue 的双向绑定机制采用数据劫持结合发布/订阅模式实现的: 通过 Object.defineProperty() 来劫持各个属性的 setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调...在读写访问器属性的值的时候,会调用相应的 getter 和 setter 函数,而我们的 vue 就是在 getter 和 setter 函数中增加了我们需要的操作。...箭头函数 这个一笔带过: 箭头函数中的 this 指向是固定不变的,即是在定义函数时的指向 而普通函数中的 this 指向时变化的,即是在使用函数时的指向 class 继承 Class 可以通过 extends...子类必须在 constructor 方法中调用 super 方法,否则新建实例时会报错。这是因为子类没有自己的 this 对象,而是继承父类的 this 对象,然后对其进行加工。

    85430

    滴滴前端高频面试题

    特点: JavaScript 对象是通过引用来传递的,创建的每个新对象实体中并没有一份属于自己的原型副本。当修改原型时,与之相关的对象也会继承这一改变。 JavaScript 类数组对象的定义?...方法1:当页面的元素数小于x时,则认为页面白屏。比如“没有任何内容”,可以获取页面的DOM节点数,判断DOM节点数少于某个阈值X,则认为白屏。 方法2:当页面出现业务定义的错误码时,则认为是白屏。...方法3:当页面出现业务定义的特征值时,则认为是白屏。比如“数据加载中”。说一下SPA单页面有什么优缺点?...然后当浏览器在解析到 script 标签时,会暂停构建 DOM,完成后才会从暂停的地方重新开始。...get操作,第一步时检查对象本身是否有这个属性,如果有就使用它,没有就去原型中查找。

    1.6K20

    你想知道的Vue3核心源码这里都有

    0 } } Track Track这个函数常出现在reactive的getter函数中,用于依赖收集 源码详解见注释 function track(target: object, type: TrackOpTypes...depsMap) { targetMap.set(target, (depsMap = new Map())) } // dep用来收集依赖函数,当监听的key值发生变化,触发dep中的依赖函数更新...总结来说 在getter时进行依赖收集 在setter时触发依赖更新 function reactive(target:object){ return new Proxy(target,{...Vue3中出现了effect,重新实现了Computed属性 effect可以被理解为副作用函数,被当做依赖收集,在响应式数据更新后被触发。...Vuex4原理探究 去除冗余代码看本质 createStore 从createStore开始看起 可以发现Vuex4中的state是通过reactive API去创建的响应式数据,Vuex3中是通过new

    1.6K30

    Kotlin 开发中遇到的坑(持续更新)

    在if条件中通过判断年级是否等于-1 来做一下操作。我们在写这段代码的时候想的可能是:当mUser不为null,而且年级不是-1的时候,通过条件判断,然后做一下操作。...但是在kotlin中,当mUser为null时,mUser?.grade的取值为null,而null != -1 ,在kotlin是成立的,这就不符合我们实际逻辑了。 解决方法如下:通过 ?...String 2、TODO 语句报错问题 在kotlin开发中,当实现某个抽象方法时,会自动生成一条TODO语句。...特别是在多线程开发环境中,而java代码又缺少了对null的强检查,这就更容易会出现空异常了。下面给大家减少及个避免 !!...原因是:Person在被转Java代码时,只会生成一个包含两个参数的构造方法,没有提供默认的构造方法。Gson在通过反射创建对象时,会优先尝试获取无参构造函数。

    5.4K02

    NestJs:深入浅出装饰器

    ) { // 触发属性访问器时 console.log(`Trigger getter(${target.name}/${propertyKey})`) } class Person {...参数修饰器会为参数声明之前,同样具有三个参数: 当参数修饰器修饰的所在方法为类的构造函数/静态方法时,第一个参数表示类的构造函数(类本身)。...反之,当参数修饰器修饰的参数所在的方法为实例方法时,此时第一个参数代表类的原型。 如果修饰的为类的静态/实例方法时,第二个参数为当前参数修饰器所在方法的方法名。...target: es5 后,我们一起来看看上边的 ts 代码经过编译后的 js 代码会变成什么样子: var __decorate = function (decorators, target, key...截止目前 Typescript 中我们将装饰器编译称为 Es5 代码后的实现已经完全和大家讲解完毕,有兴趣的同学可以私下自己尝试去阅读一下编译后的 Es5 代码,其实实现的机制无非是通过不同参数个数来确定而已并没有多少复杂

    61710

    【前端词典】学习 Vue 源码的必要知识储备

    我们知道 JavaScript 是弱类型的语言,所以我们在写代码的时候容易出现一些始料未及的问题。也正是因为这个问题,才出现了 Flow 这个静态类型检查工具。...其实 Vue 的双向绑定机制采用数据劫持结合发布/订阅模式实现的: 通过 Object.defineProperty() 来劫持各个属性的 setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调...在读写访问器属性的值的时候,会调用相应的 getter 和 setter 函数,而我们的 vue 就是在 getter 和 setter 函数中增加了我们需要的操作。...箭头函数 这个一笔带过: 箭头函数中的 this 指向是固定不变的,即是在定义函数时的指向 而普通函数中的 this 指向时变化的,即是在使用函数时的指向 class 继承 Class 可以通过 extends...子类必须在 constructor 方法中调用 super 方法,否则新建实例时会报错。这是因为子类没有自己的 this 对象,而是继承父类的 this 对象,然后对其进行加工。

    90030

    「源码级回答」大厂高频Vue面试题(上)

    其实默认Vue在初始化数据时,会给data中的属性使用Object.defineProperty重新定义所有属性,当页面取到对应属性时。...在get中通过dep.depend()收集依赖。当数据改变时,拦截属性的更新操作,通过set中的dep.notify()通知相关依赖进行更新。 Vue 中是如何检测数组变化?...指向了自己定义的数组原型方法,这样当调用数组 api 时,就可以通知依赖更新。如果数组中包含着引用类型,会对数组中的引用类型再次进行观测。 这里用一张流程图来说明: ?...发现没有 cb 而有 _resolve 时就会执行之前返回的 Promise 对象的 resolve 函数。...== 'production' && getter == null) { warn( `Getter is missing for computed property "${

    93721

    Kotlin for Java Developers 学习笔记

    getter,所以当访问 foo2 时,会访问自定义的 getter,因此输出 2 次 “Calculating……” val foo1 = run { println("Calculating the...getter 会 override 父类的 getter 当新建一个子类的时候,首先调用了父类的构造器,父类的 foo 为 1,并且拥有一个返回了(父类的)foo 的 getter,然后调用 init...data 修饰时,会自动实现一个比较域成员的 equals,于是就会得到 true Kotlin 只会使用主构造器中的属性来实现 equals,不会使用类在其他部分定义的变量 当明确知道自己的类考虑了所有考虑的情况时...当只使用 Kotlin(而不需要从字节码层面被 Java 使用)时,那么没有理由使用 Array,应该始终使用 List Nothing 是 Kotlin 中的底层类型,Nothing 可以看做是任何类型的子类...println(description.length) // NullPointerException 这样会使得 Kotlin 中的 Nullable 检查毫无用处,因为依然可能出现 Null Pointer

    2.3K10
    领券