注:本文摘自司徒正美编著的《JavaScript框架设计》一书。前端
若是是从内部架构与理念划分,目前JavaScript框架能够划分为5类。编程
出现的是以命名空间为导向的类库或框架,如建立一个数组用new Array()
,生成一个对象用new Object()
,彻底的Java风格,所以咱们就能够以某一对象为根,不断为它添加对象属性或二级对象属性来组织代码,金字塔般地垒叠起来。表明做如早期的YUI
与EXT
。数组
出现的是以类工厂为导向的框架,如著名的Prototype
,还有mootools
、Base2
、Ten
。它们基本上除了最基本的命名空间,其余模块都是一个由类工厂衍生出来的类对象。尤为是mootools 1.3
,把全部类型都封装成Type类型。浏览器
就是以jQuery
为表明的以选择器为导向的框架,整个框架或库主体是一个特殊类数组对象,方便集化操做——由于选择器一般是一会儿选择到N个元素节点,因而便一并处理了。jQuery
包含了几样了不得的东西:“无new
实例化”技术,$(expr)
就是返回一个实例,不须要显式地new
出来;get first set all访问规则:数据缓存系统。这样就能够复制节点的事件了。此外,IIFE(Immediately-Invoked Function Expression)也被发掘出来。缓存
就是以加载器串联起来的框架,它们都有复数个JavaScript
文件,每一个JavaScript文件都以固定规则编写。其中最著名的莫过于AMD
。模块化是JavaScript走向工业化的标志。《Unix编程艺术》列举的众多“金科玉律”的第一条就是模块,里面有言——“要编写复杂软件又不至于一败涂地的惟一方法,就是用定义清晰的接口把若干简单模块组合起来,如此一来,多数问题只会出如今局部,那么还有但愿对局部进行改进或优化,而又不至于牵动全身”。许多企业内部框架都基本采起这种架构,如Dojo
、YUI
、kissy
、qwrap
和mass
等。安全
就是具备明确分层架构的MV*
框架。首先是JavaScript MVC
(如今叫CanJS
)、backbonejs
、spinejs
,而后更符合前端实际的MVVM
框架,如knockout
、ember
、angular
、avalon
、winjs
。在MVVM
框架中,原有DOM操做被声明式绑定取代了,由框架自行处理,用户只需专一于业务代码。架构
下面是有关框架特征的结论。框架
对基本数据类型的操做是基础,如jQuery就提供了trim
、camelCase
、each
、map
等方法,对Prototype.js
等侵入式框架则是在原型上添加camelize
等方法。dom
类型的断定必不可少,常见形式是isXXX
系列。异步
选择器、domReady
、Ajax
是现代框架的标配。
DOM
操做是重中之重,节点的遍历、样式的操做、属性操做也属于它的范畴,是否细分就看框架的规模了。
brower sniff
已过期,feature detect
正被应用。不过特性侦测仍是有局限性,若是针对于某个浏览器版本的渲染Bug、安全策略或某些Bug的修正,仍是要用到浏览器嗅探。但它应该独立成一个模块或插件,移除框架的核心。
如今主流的事件系统都支持事件代理。
数据的缓存与处理,目前浏览器也提供data-*
属性进行这方面的工做,但不太好用,须要框架的进一步封装。
动画引擎,除非你的框架像Prototype.js
那样拥有像script.aculo.us
这样顶级的动画框架作后盾,最好也加上。
插件的易开发和扩展性。
提供诸如Deferred
这样处理异步的解决方案。
即便不专门提供一个类工厂,也应该存在一个名为extend
或mixin
的方法对对象进行扩展。jQuery
虽然没有类工厂,但在jQuery UI
中也不得不增长一个,可见其重要性。
自从jQuery
出来一个名为noConflict
的方法,新兴的框架都带此方法,以求狭缝中生存。
许多框架很是重视Cookie
操做。