博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
跟随大神实现简单的Vue框架
阅读量:5332 次
发布时间:2019-06-15

本文共 1751 字,大约阅读时间需要 5 分钟。

自己用vue也不久了,学习之初就看过vue实现的原理,当时看也是迷迷糊糊,能说出来最基本的,但是感觉还是理解的不深入,最近找到了之前收藏的文章,跟着大神一步步敲了一下简易的实现,算是又加深了理解。

  
Document
{
{name}}

{

{name}}

  以上的备注是我看了文章后自己的一些理解,这个得简单实现跟vue的源码好像是有区别,比如

function defineReactive(obj, key, val) {    var dep = new Dep()    var childOb = Observer.create(val)    Object.defineProperty(obj, key, {        enumerable: true,        configurable: true,        get: function metaGetter() {            // 如果Dep.target存在,则进行依赖收集            if (Dep.target) {                dep.depend()                if (childOb) {                    childOb.dep.depend()                }            }            return val        },        set: function metaSetter(newVal) {            if (newVal === val) return            val = newVal            childOb = Observer.create(newVal)            dep.notify()        }    })}Watcher.prototype.addDep = function (dep) {    var id = dep.id    if (!this.newDeps[id]) {        this.newDeps[id] = dep        if (!this.deps[id]) {            this.deps[id] = dep            dep.addSub(this)        }    }}作者:百度外卖大前端技术团队链接:https://juejin.im/post/5a44b15e51882538fe631406来源:掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 源码中在dep的get里面并没有直接调用addsub,而是调用

dep.depend(); 而dep.depend() 实际执行了 Watcher.addDep() 这样最终是在Watcher对象的方法里面实现了增加订阅者,感觉好像是订阅者主动要求dep添加自己,而简易框架是,dep主动添加,感觉都差不多吧。,可能原文作者为了方便,而vue可能处于更全面的考虑吧

另外我也懂了vue原理中watcher,dep,observer,compile等这几个对象的概念和他们之间的关系,observer是数据观察者,主要是劫持data数据,添加set,get,并观察数据的变动,若触发了set,就调用dep的notify方法,若触发了get,就会新增watcher到dep的存放观察者的数组中。

另外这个图片也可以说明一切,终于看懂了,以前知道这么连接,只是不知道为什么这么连接的,另外还有一篇文章是讲解关于这幅图的理解的那个是对源码进行解读的,比较详细

,另外还有一篇文章也是大牛自己实现vue的简易框架的,与这个得实现思路略微有所不同:

 

转载于:https://www.cnblogs.com/fantasy-zxf/p/8145131.html

你可能感兴趣的文章
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
忘记root密码,怎么办
查看>>
linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
查看>>
《黑客与画家》 读书笔记
查看>>
bzoj4407: 于神之怒加强版
查看>>
mysql统计一张表中条目个数的方法
查看>>
ArcGIS多面体(multipatch)解析——引
查看>>
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
设计模式 单例模式 使用模板及智能指针
查看>>
c#的const可以用于引用类型吗
查看>>
手动实现二值化
查看>>
What Linux bind mounts are really doing
查看>>
linux top命令详解
查看>>
博弈论小结
查看>>
模拟Post登陆带验证码的网站
查看>>
NYOJ458 - 小光棍数
查看>>
java中常用方法
查看>>
【Programming Clip】06、07年清华计算机考研上机试题解答(个别测试用例无法通过)...
查看>>