从内部架构和理念划分,目前JavaScript框架可以划分为5类。

第一种是以命名空间为导向的类库或框架,如果创建一个数组用new Array(),生成一个对象用new Object(),完全的java风格,因此,我们以某一对象为跟,不断为它添加对象和二级对象属性来组织代码,如金字塔般垒起来,早期代表YUI,EXT(so,不是有活力的公司都还用它们)

第二种是以类工厂为导向的框架。著名的有Prototype,还有mootools、Base2、Ten,它们基本上除了最基本的命名空间,其它模块都是一个由类工厂衍生出来的类对象。尤其mootools1.3把所有类型都封装成Type类型。

第三种,就是以jQuery为代表的以选择器为导向的框架,整个框架或库主体是一个特殊的类数组对象,方便集化操作(因为选择器一下子选择到了N个元素节点),于是一并处理了。jQuery有几样了不起的东西:

  • “无new实例化”技术,$( expr )就是返回一个实例,不需要显式的new出来;
  • get first set all访问规则;
  • 数据缓存系统。这样就可以赋值节点事件了。
  • IIFE也被发掘出来

第四种,就是加载器串联起来的框架,它都有复数个javascript文件,每个javascript文件都以固定规则编写。其中,最著名的莫过于AMD。模块化是javascript走向工业化的标志,“要编写复杂软件有不至于一派涂地的唯一方法,就是定义清晰的接口,把若干模块组合起来,如此一来,多数问题只会出现在局部,那么还有希望对局部进行改进和优化,而不至于牵动全身。”许多企业内部框架都基本采取这种架构,如Dojo,YUI,Kissy,qwrap,mass,(requirejs,Seajs)等.

第五种,就是具有明确的分层构架的MV*,首先是javascript MVC,(现在叫Canjs)、backbone.js和spinejs,然后更符合前端实际的MVVM框架,如,knockout,emberm,angular,avalon,winjs。在MVVM框架中,原有的DOM操作被声明式绑定取代了,由框架自由处理,用户只专注于业务代码。

javascript框架的主要功能

jQuery框架类库的模块划分主要依据在github的源代码,基本上都是一个模块一个javascript文件,jQuery一开始专注于DOM操作的思路一开始就是对的,以后不断在兼容性上,性能上进行改进,经过多年发展,jQuery庞大的插件与完善的BUG提交渠道,使得自身不断完善

Prototype.js早期的王者,它划分为四个部分。

  • 语言扩展
  • DOM扩展
  • Ajax部分
  • 废弃部分,新版本用其他方法实现原有功能

Prototype.js的语言扩展覆盖面很广,包括基本数据类型和从语言借鉴过来的“类”。其中,Enumerable只是一个普通的方法包,ObjectRange、PeriodicalExecuter、Templat则是用Class类工厂生产出来的(来自社区贡献)。

mootools由于API设计的非常优雅,其官方网站上有很多优质插件,才没有在原型扩展的反对浪潮中没落。

Rightjs:又一个在原型扩展上的框架,MochiKit 一个Python风格的框架,十分独到,能进框架前十。
Ten:日本著名博客社区 Hatena的Javascript框架,amachang开发,受Prototype.js影响,是最早以空间命名的框架典范;mass Framework:一个以大模块开发为目标,jQuery式的框架。

经过细节的比较,我们很容易得出以下框架特征的结论

  • 对基本数据的操作是基础,如jQuery提供的trim camelCase each map等方法,Prototype.js等入侵式框架则在原型上添加camelize等方法
  • 类型的判定比不可少,常见的形式是jsXXX系列
  • 选择器,domReady Ajax是现代框架的标配
  • DOM操作是重中之重,节点的遍历,样式操作,属性操作也属于它的范畴
  • 现在主流的事件系统都支持事件代理
  • 数据的缓存与处理,目前浏览器也支持data-属性进行操作,但不好用,需要框架封装
  • 动画引擎
  • 插件的易开发和扩展性
  • 提供诸如Deferred这样处理异步的解决方案
  • 即使不专门提供一个类工厂,也应该存在一个名为extend或mixin的方法对对象进行扩展。jQuery虽然没有类工厂,但在jQuery UI中也不得不增加一个,可见其重要性。
  • 自从jQuery出来一个名为noConflict的方法,新兴的框架都带此方法,以求狭缝中生存。
  • 许多框架非常重视Cookie操作。

 附件:前端MVVM的应用-UnitedStack

(本章已完)

转载于:https://www.cnblogs.com/ahthw/p/4532213.html

第一章 : javaScript框架分类及主要功能相关推荐

  1. javascript忍者秘籍(第二版)翻译学习 第一章 JavaScript无处不在

    前言废话(立flag) <javascript忍者秘籍第二版>这本书据说是JQUERY之父写的,emmm,肯定值得我这种菜狗来学习膜拜,所以打算花时间来把这本书通读记录一便,因为是看的英文 ...

  2. 【数据库】第一章 数据库的分类、SQL、数据库、表和表记录的常用操作

    [数据库]第一章 数据库的分类.SQL.数据库与表的常用操作 文章目录 [数据库]第一章 数据库的分类.SQL.数据库与表的常用操作 一.数据库的分类 1.关系型数据库 2.非关系型数据库 3.MyS ...

  3. 网络基础-第一章:计算机网络分类

    第一章:计算机网络分类 一.计算机网络的组成及分类 计算机网络通俗地讲就是由多台计算机(或其它计算机网络设备)通过传输介质和软件物理(或逻辑)连接在一起组成的.总的来说计算机网络的组成基本上包括:计算 ...

  4. 第一章 TestNG框架自动化简述

    ------Web自动化测试之Webdriver+TestNG--从零到熟练(系列) 在做页面自动化测试的时候,有很多语言和框架可以选择,如语言有java,python,php,而框架有各种unitt ...

  5. OSGi原理与最佳实践:第一章 OSGi框架简介(1)Equinox

    参考文章:http://osgi.com.cn/article/tagged/4002946 Equinox 首先来看 Equinox.Equinox 是 Eclipse 中的项目,并作为 OSGi ...

  6. 第一章 JavaScript简介。

    序: 2015年3月31日,我从工作了10年的首钢辞职了,在首钢(二炼钢),我主要做自动化(PLC.仪器仪表等)系统的施工.维护.开发.管理等工作,其中头4年工作在北京,后6年工作在河北迁安. 现在来 ...

  7. Javascript权威指南——第一章Javascript概述

    示例:javascript贷款计算器 相关技术: 1.如何在文档中查找元素: 2.如何通过表单input元素来获取用户的输入数据: 3.如何通过文档元素来设置HTML内容: 4.如何将数据存储在浏览器 ...

  8. 第一章 国产MCU雅特力AT32 特有功能 资料介绍

    目录 概述 特有功能 开发环境 资料下载 最后 概述 雅特力MCU是一款高性价比的国产32位MCU,相对来说具有更高的主频,更大的sram,以及更加丰富的外设资源可以使用.比如AT32F403A系列, ...

  9. 翻译:《JavaScript 权威指南(第5版)》第一章(一)

    声明:翻译只有一个目的:学习用途.若有版权问题请及时联系本人. 本贴文根据篇幅将第一章的翻译分为两个部分,这是第一部分的内容. Chapter 1. Introduction to JavaScrip ...

最新文章

  1. RGBD相机模型与图片处理
  2. python写好的代码怎么给别人使用-10分钟学会用python写游戏!Python其实很简单!...
  3. 汇编:转移目的地址在内存中
  4. UIT创新科存储系统服务“500强”汽车名企
  5. 剖析Caffe源码之Net---Net构造函数
  6. 你不知道的事:AWR 基线和 AWR Compare Period Report 功能介绍
  7. 样条曲面_SolidWorks肥皂块曲面建模,你的肥皂掉了
  8. java 反射 getClass()
  9. linux内核编译指定驱动,linux内核编译,配置本机驱动
  10. Rust的各种花式汇编操作
  11. ssize_t和size_t详解
  12. mysql的groupby_MYSQL GROUP BY用法详解
  13. Python实现ACO蚁群优化算法优化支持向量机回归模型(SVR算法)项目实战
  14. 百度地图--证书认证问题
  15. 【Maven】你好,Maven >>> 与Maven的初次见面~
  16. 使用MapReduce统计一篇微博数据的点赞次数,并且输出前五个最高的点赞数量。
  17. 快播王欣:我所失去的一切,都要靠区块链双倍奉还!
  18. java初级程序员提高_初级Java程序员如何发展、晋升?
  19. win7安装office2007失败
  20. 博物馆文创:打造“最后一个展厅”

热门文章

  1. python3.6字典有序_Python如何按值对字典进行排序?
  2. 虚拟机上部署的项目 访问路径怎么写_桌面虚拟化即将流行开来——基于Hyper-V虚拟机的桌面虚拟化部署...
  3. this.$router.push如何刷新页面_【前端技术】如何优雅的释放F5(基于whistle的livereload)...
  4. linux并发服务器实例,linux-----网络编程----epoll实现并发服务器
  5. 知道坐标matlab三维作图,已知点坐标,要求根据坐标作出三维曲面图
  6. 谈计算机知识对学生的作用,浅谈计算机在教学中的作用
  7. linux mrtg 进程名称,Linux上的MRTG流量监控中心
  8. windows下 mysql 转移data目录
  9. java多线程问题 Runnable和Callable有什么不同?
  10. 大数据 机器学习 算法概论