jQuery的不足之处
使用Jquery有一段时间了,对Jquery轻便、易学易用、方便的DOM操作以及这个框架的设计思想都由衷的赞叹。但是Jquery在设计过程中也有
一些不合理的地方(当然,有些东西见仁见智,可能你并不觉得这不合理),今天看到了一篇文章,觉得写的挺有道理的,我做了一下整理。并不是说Jquery
很差,让大家不要用,而是通过这些内容来更好的了解和使用jQuery。
1.each工具的回调函数参数的设计。
jQuery.each(obj,callback)
通用遍历方法,可用于遍历对象和数组。
不同于遍历 jQuery 对象的 $().each() 方法,此方法可用于遍历任何对象。回调函数拥有两个参数:第一个为对象的成员或数组的索引,第二个为对应变量或内容。 如果需要退出 each 循环可使回调函数返回 false,其它返回值将被忽略。
很
明显,这个参数的设计不合理。应该将参数的顺序对调。原因很简单,通常做遍历的时候,我们只需要获取当前对应的变量或内容就可以了,大多数情况下是不需要
索引的。如果索引参数在后面,在不使用的情况下就可以省略。也许你觉得我在鸡蛋里面挑骨头,你看看jQuery的另外一个工具的设计就清楚了:
jQuery.grep(array,callback,[invert])
这个工具是对对象和数组做遍历用的,但是这个工具的callback函数的两个参数中第一个为对应变量或内容,第二个为对象的成员或数组的索引。正好与jQuery.each相反。
2.this指针的变换
在jQuery中this指针的变换是非常频繁的,可能稍不留神,就会出错。特别是在OO编程的时候。例如:
function Dog(){
this.name="旺财";
}
Dog.prototype.eat=function(){
$("div").click(function(){
alert(this.name+"在啃骨头");
});
};
你会发现这段代码并不会像你想象的那样执行,因为this指针已经变换,指代的是当前的div对象,而不是Dog的实例。
3.jquery.inArray(value,array)工具的设计
就字面意思来说,这个函数应该返回true or false,事实上返回的是value在array第一次出现的位置。若不存在,返回-1。若你当作true或false来处理,就郁闷了,-1是true。
4.对OO的支持不够
jquery的DOM操作的支持很好很强大,但在OO方面却没有做任何工作。而且,就jQuery的编码风格也和OO有点格格不入。而其他框架如prototype,MooTools都有比较好的支持。