一个javascript框架应有的功能

一个人学许多东西,不等于他会很多东西,学了也会忘的,学了也不等于会运用,这时我们应该整一个很复杂的东西出来,那么就知道自己到底去到什么程度。基于这样的理由,我开始搞框架了,像我群里面的许多人那样,因此请不要感到惊奇或敬佩什么的。我们总是免不了造轮子,前人走过路,我们也不得不走,只不过怀着不同的目的与心情。我也没有自大到想去挑战这个挑战那个,仅仅是想自食其力,或许其最好的结果是拿来与友人切磋切磋。于是掂量一下,总结如下,如果有好心人能迷津指点最好不过。

首先要模块化。像jquery那样内部看起来乱成一团的类库,如果去github看一下,发现还是很有组织地分成几块。这样对逐个改进非常有利。当然如果与ext,base2,mootools比起来,jquery肯定不合格。

二,风格要统一,像prototype满眼是ruby标准库的方法名,mootools拥有许多$开头的方法,方法多是单个单词,jquery的方法则是多为缩略语。我基本上跟prototype走,但有些名字非常流行,我也会采纳的。总之,让大家一看就知这方法与属性是干什么。

三,不使用with,不对object与dom的原型进行扩展,不滥用try...catch与自动执行函数。

基于上面三条铁则,我开始设计我的类库。由于是模块化,因此它会把边沿的功能放置到其他js文件中,核心功能置为一个文件。对,就像ext,mootools那样。这样带来两个问题,其他js文件怎么知道它是本类库的一部分,肯定要像ext暴露一个不会变的全局变量,不能像jquery那样使用noconflict处处退让。注意,我做的是框架,不是类库。它的功能体系应该具有足够的广度与深度来满足我们的需要,不能项目做到一半,发现它不够用,被逼搭上十几个插件或另一个框架,这样的项目维护起来很头痛。换言之,它拥有一个坚定不移的命名空间,像ext或yui那样。另一个问题是,如何加载那些子模块。像ext那样实在太不人道,动不动都要自己加。虽然javascript模块的依赖关系肯定比不上java的,但我们不应该排除这种可能,如我们有一天牛起来,要实现一个web os呢?!因此需要一个像dojo那样的包机制,功能不一定像它那样强悍,但一定要有。于是第一个功能就这样确定,拥有一个模块加载器。

第二个功能是拥有一个强大的类工厂。jquery在这方面真是不行,没有类,做大一点的东西,这缺点就暴露出来了,代码非常难组织,别人也很难读懂你的代码。在这方面,mootools的实现是最漂亮的,这非常值得参考。

第三个功能是浏览器嗅探,不过尽量利用非ua技术来实现。各浏览器的navigator.useragent都在撒谎,非常不可靠。事实上,不用au,我与群里的朋友找得许多更好的替代品。mootools的思路基本与我的一致,需要自豪一下。

第四个功能是类型识别,像jquery只提供了很少实现,isarray与isfunction,非常不够用,有时我们还要判定字符串数字呢!不过,jquery1.4中提供了一个isplainobject,用于深拷贝,这函数要盗窃一下。

第五个功能是特征侦测,基本上用作内部方法。这个我有专文介绍。

第六个功能是扩展一下一些原生对象。让原生对象也能漂亮的“链”起来。暂定对象为array,string,number,function。

第七个功能是提供一个选择器,我已经实现了一个,正好为它找个好归宿。做了一个框架,动不动要借用人家的选择器非常可悲,这里特意点明批评一下prototype1.7rc同学,实在太让我失望了。

第八个功能是处理文档,指创建节点,插入节点,替换节点,删除节点与复制节点。创建节点中利用innerhtml可以大大提高效率。删除节点方面,innerhtml在ie下又立功了,具体见我另一篇博文《ie中的 dom 超空间与innerhtml》

第九个功能是遍历文档,指给定一个节点,找到其左邻右邻五姑六婆,具体可参考一下jquery的api。

第十个功能是设置与获取元素节点的属性与样式。对classname的操作也列入此模块。

第十一个功能是异步调用,换言之是ajax,对于不同源者,还要用上动态script。json的相关处理也列入此模块。

第十二个功能是事件处理,主要工作是处理浏览器的差异性,二是提供一个观察者模块,实现自定义事件,三是提供一个(内存)缓存系统。

第十三个功能是对元素进行变形操作,以及基于其上的特效。具体可参考mootools的api。

第十四个功能是提供本地储存,利用一切可用的资源,如cookie与userdata,html5还带来许多好东西。

第十五个功能是提供一个列队机制,这应该像dojo或mochikit的deferred模块,而不是jquery那个简单的queue与delay。

第十六个功能是统一对xml的操作。

嘛,基本上是这样,功能很多,不过由于是对原生对象进行了原型扩展,许多方法会写得很精简的。如有什么好建议不妨提出来我听听。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值