原帖地址:http://www.cnblogs.com/aaronjs/p/3143641.html
官网提供架构图
单看这个图呢,还木有说明,感觉有点蛋疼,作者的抽象度太高了,还好在前面已经大概分析过了执行流程
如图
- 左边是View视图,我们就理解html结构,换句话就是说用户能看到的界面,渲染页面,绑定事件,切换类名,什么脏活都揽
- 右边是ViewModel 视图模式,就是开发者通过avalon.define("xxx", function(vm){vm.firstName = "模型"})
- 既然是MVVM 那么还有个M跑哪里去了,M在MVVM定义中,M只是一个过客,被VM给再次包装,它与其他表示业务状态的东西融入VM(ViewModel)中,一个普通的JS对象,可能是后台传过来的,也可能是直接从VM中拿到 vm.firstName = "模型" 这个就是M咯,所以作者在图中就没体现出来吧
从定义ViewModel开始,扫描到vm关联的东东 形成访问器,好吧其实整个就这么简单
打开avalon源码,我们就看到这样的结构
(function(DOC) {
内部代码
})(document);
这种基本的结构虽然已经被写烂了 ,但是既然是分析就从来到位来一遍吧.
自调用匿名函数
jquery为例
- 这是一个自调用匿名函数。什么东东呢?在第一个括号内,创建一个匿名函数;第二个括号,立即执行
- 为什么要创建这样一个“自调用匿名函数”呢?
通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命名空间。这点非常有用也是一个JS框架必须支持的功能,jQuery被应用在成千上万的JavaScript程序中,必须确保jQuery创建的变量不能和导入他的程序所使用的变量发生冲突。
3. 匿名函数从语法上叫函数直接量,JavaScript语法需要包围匿名函数的括号,事实上自调用匿名函数有两种写法
写法1
(function() {
console.info( this );
console.info( arguments );
}( window ) );
写法2
(function() {
console.info( this );
console.info( arguments );
})( window );
4.为什么要传入window呢?
通过传入window变量,使得window由全局变量变为局部变量,当在jQuery代码块中访问window时,不需要将作用域链回退到顶层作用域,这样可以更快的访问window;这还不是关键所在,更重要的是,将window作为参数传入,可以在压缩代码时进行优化,看看jquery-1.6.1.min.js:
(function(a,b){})(window); // window 被优化为 a
5.为什么要在在参数列表中增加undefined呢?
在 自调用匿名函数 的作用域内,确保undefined是真的未定义。因为undefined能够被重写,赋予新的值。
undefined = "now it's defined";
alert( undefined );
浏览器测试结果:
6.注意到源码最后的分号了吗?
分号是可选的,但省略分号并不是一个好的编程习惯;为了更好的兼容性和健壮性,请在每行代码后加上分号并养成习惯。
总体架构
按代码结构
(function(DOC) {
//命名空间
avalon = function(el) {
return new avalon.init(el);
};
//avalon挂在工具函数
// 迷你jQuery对象的原型方法
//css操作相关的方法
//ecma262兼容补丁
//nextTick 高级定时器
//Observable 观察者模式
//Define 模型定义方法
//Parse 解析求值函数与执行作用域
//Scan 节点扫描
//Bind html自定义标签绑定处理方法
})(document);
整个结构基本如上
以后会分析具体的每个实现,源码分析尽量到行...
本文链接
分享到:
相关推荐
本文将深入探讨基于司徒大神创建的轻量级MVVM框架——Avalon2.0,如何搭建一个简易的脚手架。Avalon2.0是一个成熟的JavaScript框架,它为开发者提供了构建复杂前端应用的能力,尤其适用于单页应用程序(SPA)的开发...
**WPF轻量级MVVM框架入门2.1.2** 在Windows Presentation Foundation(WPF)开发中,MVVM(Model-View-ViewModel)模式是一种常见的设计模式,它有助于实现应用程序的视图与业务逻辑之间的解耦。MVVM通过数据绑定、...
Vue.js是一套构建用户界面的轻量级MVVM框架,与其他重量级框架不同的是, Vue.js 的核心库只关注视图层,并且非常容易学习,很容易与其它前端技术或已有的项目整合。 本系课程,主要分为两部分完成。第一部分:掌握...
在本文中,我们将深入探讨如何在WinForm应用中利用MVVM框架,并且通过引入Castle动态代理来提升效率和代码复用性。标题“winform上的mvvm框架--升级版(动态代理)”揭示了我们将在WinForm环境中实现一个基于MVVM...
标题中的“wpf-mvvm-DeskTop-Sample-master”表明这是一个关于WPF(Windows Presentation Foundation)桌面应用程序的示例项目,使用了MVVM(Model-View-ViewModel)设计模式。这个项目是用C#编程语言编写的,面向的...
一个迷你框架
MvvmLight(Model-View-ViewModel Light)是由GalaSoft公司开发的一个轻量级的MVVM(Model-View-ViewModel)库,广泛用于Windows桌面应用、UWP、Xamarin和 Uno 平台的开发。 MVVM是一种设计模式,它鼓励分离应用...
作为国内前端开发者熟知的框架,avalon.js以其轻量级、高性能和易用性,赢得了众多开发者的青睐。本文将基于"avalon-1.4.5.zip"资源包,深入探讨avalon.js的核心特性和实际应用。 一、avalon.js简介 avalon.js是由...
- **Kotlin Coroutines**:用于处理异步操作,提供轻量级的协程,避免回调地狱,提高代码可读性。 - **Koin** 或 dagger-hilt:依赖注入库,简化对象的创建和管理,降低组件间的耦合度。 项目krismileMvvm-master...
在现代Web开发中,前端MVVM(Model-View-ViewModel)组件化框架已经成为了主流,它们极大地提高了开发效率,降低了代码复杂性。本篇文章将详细探讨"前端MVVM组件化框架"这一主题,重点关注JavaScript开发中的框架...
在Android开发中,MVVM(Model-View-ViewModel)架构是一种流行的设计模式,它将业务逻辑、用户界面和数据模型分离,提高了代码的可测试性和可维护性。本示例"MVVMDemo---listView的使用"着重展示了在MVVM架构下如何...
Cpage.js是一款轻量级的Mvvm框架,使用TypeScript开发,可以方便地进行组件化开发,语法统一、简介明了,不依赖于第三方框架,适合中小项目开发。框架同时支持es5与es6语法,可参考example中示例。
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用!...一个轻量级mvvm框架源码+项目说明(符合Material Design风格,Kotlin 语言编写,使用Retrofit+协程+Flow网络请求等优秀的开源框架).zip
.NET-MVVMSidekick是一个专为.NET开发者设计的轻量级MVVM(Model-View-ViewModel)框架,它充分利用了Reactive Extensions (RX) 和 `async/await` 等现代编程技术,以提高应用程序的可维护性、响应性和开发效率。...
轻量级的mvvm框架Yox与Vue一样,但是比Vue更轻量且易于使用。 关键功能是Yox支持IE6。 QQ组:232021930安装CDN
* Prism:一种基于 MVVM 模型的框架,提供了更多的功能和工具。 MVVM 模型在 Silverlight 和 WPF 中的应用 MVVM 模型在 Silverlight 和 WPF 中得到了广泛的应用,因为这两个平台都支持 XAML 数据绑定和命令绑定。...
分享视频教程——轻量级MVVM框架Vue.js快速上手(MVVM、SEO单页面应用、SSR服务器端渲染、Nuxt.js) 本系课程,主要分为两部分完成。第一部分:掌握Vue.js设计规范的语法。 第二部分:通过一些实际的前端案例来强化...
在Android开发中,MVVM(Model-View-ViewModel)架构是一种流行的设计模式,它将应用程序的业务逻辑、用户界面和数据模型分离,提高了代码的可测试性和可维护性。本项目"MVVMDemo--view和model之间的互相更改.rar...
Stylet是一个轻量级的MVVM框架,它简化了WPF应用中的许多常见任务,包括依赖注入、命令处理和UI自动化测试。 在Stylet中,窗体交互是通过ViewModel来实现的。ViewModel作为View和Model之间的桥梁,处理用户输入并...