Creeper

Results 220 comments of Creeper

@waterVenice7 我**当然**没有搞错。一个最简单的例子: ```js const parent = { x: 1 }; const child = Object.create(parent); ``` **对 `child` 继承了 `parent`的说法,显然是合理。** 如果你有一些其它面向对象语言的基础,那么问出这个问题是比较自然的,因为对Java/C++之类的语言来说,类(class)和实例(instance)就是完全不同的两个概念。它通过类的继承来实现继承。 但是,对JavaScript而言,它没有类(class)和实例(instance)的区别,它只有对象(object)。它通过原型链来实现继承(指定某个对象的原型对象 `__proto__`)。

@qiangzi7723 文章里其实已经写了,如果希望更多阅读,可以参考: 1. 2. 为什么一次循环里比较 4 个 vnode?但你可以看到如果 `isSameVnode` 通过才会处理相应的两个 vnode,然后进入下次循环: 1. `isSameVnode` 判断通过说明是新旧队列里的相同的 vnode,当然要做移动/更新处理。 2. 一次虽然 4 个 vnode 俩俩比较,但最终只处理一对 vnode,对不对? 3. 如果 `isSameVnode` 判断都没通过,其实只处理 `newStartVnode`,要么从旧队列里找到它对应的 vnode 做更新处理,找不到则当作新插入的 vnode...

@qiangzi7723 👍 非常感谢,的确应该插入到 `oldStartVnode.elm` 前面。

@lawpachi 按你的来那时间复杂度就是 O(mn) 了。

@daweilv 知乎不是我的文章 😂 另外React并不会为特定情况去做优化,想对diff优化,除了用好key/设计好html结构等等,主要是善用 `shouldComponentUpdate`,在diff之前拦截掉。

> 前辈,我看你 /code/snabbdom/* 里面关于webpack 的配置很简单,但是运行您的项目发现竟然有热更新的功能,请问这是为什么呢?是 `webpack-dev-server` 默认就会开启热更新吗? 对

> ```js > // 比较 old children 和 new children,并更新 > if (oldCh && ch) { > if (oldCh !== ch) { > // 核心逻辑(最复杂的地方):怎么比较新旧 children 并更新,对应上面 > // 的数组比较...

> ```js > ```js > else if (isSameVnode(oldStartVnode, newEndVnode)) { > patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue) > //api.nextSibling(oldEndVnode.elm)这里能取到值吗? > api.insertBefore(parentElm, oldStartVnode.elm, api.nextSibling(oldEndVnode.elm)) > oldStartVnode = oldCh[++oldStartIdx] > newEndVnode = newCh[--newEndIdx] > }...

@cendylee 就我看到的资料来说,好像是在task之间进行的。如果有更详细可靠的资料进行补充或更正当然更好。

@hyj1991 从源码来看,`process.nextTick` 属于 microtask。 ```cpp inline int Start(Isolate* isolate, IsolateData* isolate_data, int argc, const char* const* argv, int exec_argc, const char* const* exec_argv) { ... { Environment::AsyncCallbackScope callback_scope(&env); LoadEnvironment(&env); }...