javascript框架设计之框架分类及主要功能
作者:hebedich 发布时间:2024-04-18 09:33:40
从内部架构和理念划分,目前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操作。
以上所述就是本文的全部内容了,希望大家能够喜欢。


猜你喜欢
- 在SQL语句中如果定义字符串,则字符串必须使用“'”就是单引号进行声明,但是如果现在所操作的数据库本身含有“'”单引号,就会
- 问题你有一个数据序列,想利用一些规则从中提取出需要的值或者是缩短序列解决方案最简单的过滤序列元素的方法就是使用列表推导。比如:>>
- 上大学的时候,对微信公众号开发浅尝辄止的玩了一下,感觉还是挺有意思的。https://www.jb51.net/article/
- 今天是边复习边创作博客的第三天,我今年大二,我们专业开的有这门课程,因为喜欢所以更加认真学习,本以为没人看呢,看了后台浏览量让我更加认真创作
- 一同事反馈有一MySQL实例因为断电之后,启动不了。用了innodb_force_recovery=6也无效,于是前往查看。排查过程:最早的
- Python数据类型之间的转换函数描述int(x [,base])将x转换为一个整数long(x [,base] )将x转换为一个长整数fl
- 本文实例讲述了Python扫描IP段查看指定端口是否开放的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/local/bin/p
- 本文实例讲述了C#使用ODBC与OLEDB连接数据库的方法。分享给大家供大家参考,具体如下:using System;using Syste
- 写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉
- 项目说明开发php项目管理系统,由于是新项目且已经部署在生产环境,导致需要根据实际使用情况,进行及时的功能升级或bug修复。每次升级,进行程
- 下载资源hadoop3.0.0spark-2.4.4-bin-without-hadoopwinutils下载(对应hadoop3.0.1的
- isdecimal()方法检查字符串是否仅由十进制字符组成。此方法只存在于unicode对象。注意:要定义一个字符串为Unico
- 分别针对ie和火狐分别作了对xml文档和xml字符串的解析,所有代码都注释掉了,想看哪部分功能,去掉注释就可以了。至于在ajax环境下解析x
- Base64编码的深入认识与理解 之前在很多业务中都有见过或者用到过Base64编码,但一直一知半解,没有对它有一个深入的认识和
- 最近发现一常见的加载进度条(loadding)的问题,所以试试,觉得还不错,大家可以看下.当然这个只是一个效果而已!呵呵,用的着的时候,你就
- 本文实例为大家分享了python自动发送报警监控邮件 的具体代码,供大家参考,具体内容如下因为有一些日常任务需要每日检查日否执行正确,所以需
- 以下列出了两种数据库的方法:ASP+Access20001.要获取的ID值字段属性必须设为:自动编号(我们假设字段名为recordID)2.
- 需求:统计列表list1中元素3的个数,并返回每个元素的索引list1 = [3, 3, 8, 9, 2, 10, 6, 2, 8, 3,
- Howdy, 大家好,又是我~ 上一次我们简单的谈了一下font set和一些要注意的基本问题。今天我们继续字体这一话题,深入讲讲上次提到
- 本文实例为大家分享了python实现用户名密码校验的具体代码,供大家参考,具体内容如下需要实现功能输入用户名密码 ;认证成功后显示 欢迎信息