javascript框架设计之框架分类及主要功能


Posted in Javascript onJune 23, 2015

从内部架构和理念划分,目前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操作。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
Dec 20 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
May 27 Javascript
快速解决jQuery与其他库冲突的方法介绍
Jan 02 Javascript
JS实现简单的顶部定时关闭层效果
Jun 15 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
Jun 24 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
Aug 01 Javascript
使用canvas进行图像编辑的实例
Aug 29 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
Oct 15 Javascript
JS实现去除数组中重复json的方法示例
Dec 21 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
js实现3D旋转效果
Aug 18 Javascript
js观察者模式的弹幕案例
Nov 23 Javascript
js的flv视频播放器插件使用方法
Jun 23 #Javascript
使用Raygun来自动追踪AngularJS中的异常
Jun 23 #Javascript
使用JavaScript的AngularJS库编写hello world的方法
Jun 23 #Javascript
浅谈setTimeout 与 setInterval
Jun 23 #Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
Jun 23 #Javascript
javascript中传统事件与现代事件
Jun 23 #Javascript
浅谈jquery中delegate()与live()
Jun 22 #Javascript
You might like
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python实现给字典添加条目的方法
2014/09/25 Python
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
python交互式图形编程实例(二)
2017/11/17 Python
Python数学形态学实例分析
2019/09/06 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
Speedo速比涛德国官方网站:世界领先的泳装品牌
2019/08/26 全球购物
企业演讲稿范文
2013/12/28 职场文书
小学生防溺水广播稿
2014/01/12 职场文书
读书活动实施方案
2014/03/10 职场文书
家长给学校的建议书
2014/05/15 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
初中优秀教师事迹材料
2014/08/18 职场文书
再婚婚前财产协议书范本
2014/10/19 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
《我的长生果》教学反思
2016/02/20 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers