一个基于ES6 的Mvvm Demo

本文通过一个基于ES6的MVVM Demo,探讨了双向绑定的实现原理,特别是观察者模式与发布订阅的关系。文章详细介绍了如何从MVVM的各个组件(Watcher、Dep、Observer)实现数据的监听和更新,以及在实际开发中何时进行订阅操作。最后,给出了GitHub上的代码演示链接。
摘要由CSDN通过智能技术生成

很多次面试都被问到双向绑定的原理,从一开始的啥都不知道到后来知道使用Object.defineProperty 劫持属性,使用发布订阅进行消息传递,再后来看了很多篇相关的文章和代码,依然应付不了面试官的追问。还是对其中的原理和实现了解的不透彻,所以最终决定自己亲手写一个。网上写mvvm 的博客有很多,都挺详细的也都贴了大段的代码,想了解的可以直接走下面的传送门,这篇文章的代码实现很大一部分都是参考了以下两个链接:

剖析Vue原理&实现双向绑定MVVM

https://github.com/DMQ/mvvm

为了防止内容同质化,这篇文章就讲讲跟这两篇文章中不一样的地方(具体表现就是没有大量代码)。一方面是将ES5 实现转换成了ES6;另一方面,更多的还是讲我在实现这个mvvm demo 中遇到的一些问题和困惑,以及在动手开始写代码之前应该如何从整体上来看待mvvm,就算是以上两篇文章的补充吧。

1. 观察者模式与发布订阅

(1)先看概念

观察者模式与发布订阅是两个很相似的概念,所以经常也会被一起提及,这两个概念确实差别很小,主要差别就在于调度中心。发布订阅是有调度中心(松耦合)的,而观察者模式是没有调度中心的,详细讲解可以参考这篇文章:

https://juejin.im/post/5a14e9edf265da4312808d86

(2)举个例子

Mvvm 中使用的是发布订阅,所以我们就来详细看一下这个模式是如何工作的。为了通俗易懂,先来讲个例子吧。

小明放暑假了,天天在家里做作业。有一天,家里要来客人,客人说是上午过来,但不一定几点来。吃过早饭,小明爸爸说:“我去上班了,如果客人来了,你给我打电话,我回来陪客人喝茶”。小明妈妈说:“我去打麻将了,如果客人来,你给我发微信,我去菜市场买菜回来做饭”。小明默默地把这一切记在了心上,等爸妈走后就在家里看电视直到客人来了然后通知他们。

在这个例子中的几个角色分别对应了发布订阅模式中的几个概念。首先,对于小明父母来说,他们是两个订阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值