搜索墙首页  编程技术  java  asp  ajax  php  c/c#/c++  数据库  oracle  mysql  db2  操作系统  windows  linux  股吧
首页 > 编程 > ajax > JavaScript
 1 2 3 4 5 6    
1楼  chenjinlai 2008-08-12

以前做界面是用jquery的,现在因为要用许多ajax效果,改用了rails自带的prototype
因为jquery用多了,换个框架也大同小异,不过细节上有很多不同。。。

1.dom加载方面:
jquery有dom ready方法,推迟js函数的绑定知道dom树完成(如果没有这个功能,一些element的事件函数之类的绑定可能会出错):
$(document).ready(function(){});

但是prototype是没有的。。。得自己找非官方的扩展,不方便,这个基本的功能,这么重要的功能,不知道为啥迟迟不加到核心库

2.path查找,dom定位方面
jquery的dom查找和css定位一致,用过就感觉非常方便,这是他的一大亮点和优点
$('.func #select_all').click(function()
$(this).parent('div').parent('div').find('li .checkbox input:checkbox')

prototype只有查找单个dom对象方便--$(id)
比较麻烦的是把单个和数组分开了,如果找一个路径下的许多对象
得$$('div .right_contact'),这种风格仍然是定位某一类型的对象
而不是用路径查找,这方面不如jquery方便和概念一致

3.函数,事件绑定
举个例子,把class为right_contact的div绑定click高亮事件,prototype写法是:
$$('div .right_contact').each(function(item){
item.observe('click', function(event){
new Effect.Highlight(item,{ duration: 2.0,startcolor: '#ffff99',endcolor: '#fffffff',restorecolor: '#fffffff' });
});
});

如果是jquery,简洁很多:
$('.right_contact').click(function(){   
$(this).toggleClass('hilight');
})

我用过很多框架,印象最深刻的是一个叫hge game engine的框架,封装了大量的底层细节和实现方法,然后他说:you could create everything from a simple puzzle to advanced multilayered platformer or strategy without even thinking of any non game logic code

优秀的框架应该是让人集中注意到业务逻辑上而不是技术特性,设计模式上
这方面,jquery比prototype优秀,最典型的例子就是
如果要鼠标点击触发函数,prototype搞个大而全的observe方法,然后去注册click事件
而jquery就有item.click函数。。。observe是能包容万象,不过jquery这种为最常用的事件
特地创建专有函数的做法,更能让人集中注意力到业务逻辑上。。。
2楼  xly_971223 2008-08-12

prototype在易用性方面没法跟jquery比
3楼  comasp 2008-08-12

对的,楼主忘记写 jQuery的ajax了。,这个也是jquery的亮点。
4楼  笨笨狗 2008-08-13

在没有深入了解一个框架之前,最好不要下定论……

1、你可以用document.observe('dom:loaded',function(){})。觉得事件名奇怪?这可是Prototype的亮点之一 ??自定义事件;

2、$$支持大部分的css3选择器,功能上并不比JQ弱,如果你需要限定上下文,可以使用dom.select(),这和你代码里的find是一样的;另外,dom导航方面,还有dom.up()、dom.down()等一系列好用的方法,你可以去试试;

3、这个语法差别的喜好,完全是见人见智,我倒是觉得针对集合元素的操作,Prototype更直观一些,另外,你这里用了特效库导致代码看起来复杂,如果要和你下面一直,何不:
$$('div .right_contact').invoke('observe','invoke',function(event){this.toggleClassName('hilight')})
为什么不用each?这是Prototype优化性能的一个方式,减少一层闭包的产生;

至于最后的总结,observe大而全?怎么不认为是接口统一呢?凭什么我还要去记那些单个的click方法呢?后面的回帖也太偏激了,还是那句话,不深入了解就不要乱说,就像我不了解JQ一样,也只能从Prototype的观点来看待这个问题。
5楼  毕竟红尘 2008-08-13

如果是java嫡系的话,大概对prototype的api组织方式会跟容易接受
ruby的话大概会JQ会跟亲切一些。

似乎有人这么说过....

框架我一般就是有什么用什么,不过第一次用jquery的时候,的确有那么点不习惯,不过后来就号了。
6楼  ayeah 2008-08-13

补充:另一个prototype无法比拟的地方,jQuery有成百上千的插件,而且可以自己轻松做自己的插件,从扩展性和架构上来说是无限大的。。。
7楼  quaff 2008-08-14

prototype.js污染对象,还污染命名空间
8楼  downpour 2008-08-14

ayeah 写道
补充:另一个prototype无法比拟的地方,jQuery有成百上千的插件,而且可以自己轻松做自己的插件,从扩展性和架构上来说是无限大的。。。


话说prototype的插件也很多,只是你不知道而已。

quaff 写道
prototype.js污染对象,还污染命名空间


污染命名空间是事实,污染对象貌似有些牵强,不过是给对象增加了很多内在方法。要说污染,jquery不污染嘛?一个button本来就有个click()方法。你现在等于把他覆盖了。
9楼  quaff 2008-08-14

downpour 写道
ayeah 写道
补充:另一个prototype无法比拟的地方,jQuery有成百上千的插件,而且可以自己轻松做自己的插件,从扩展性和架构上来说是无限大的。。。


话说prototype的插件也很多,只是你不知道而已。

quaff 写道
prototype.js污染对象,还污染命名空间


污染命名空间是事实,污染对象貌似有些牵强,不过是给对象增加了很多内在方法。要说污染,jquery不污染嘛?一个button本来就有个click()方法。你现在等于把他覆盖了。

click方法是jQuery对象的不是button对象的,jquery都是用jQuery对象去包装dom对象而不是像prototype.js直接在dom对象里面加方法,一些隐蔽的错误往往就出在这些问题上,特别是和引入第三方代码的时候,比如根据某个对象有什么属性方法来判断浏览器等,还有自以为是的为String加上了一个startsWith,移植到jquery的时候就吃了亏,如果当初用indexOf()==0就没这个问题了.
10楼  笨笨狗 2008-08-14

个人喜好而已了……
如果硬要说人家是“污染”,那你去看看ruby世界的东西,open class还不是大逆不道啊?呵呵
11楼  quaff 2008-08-14

笨笨狗 写道
个人喜好而已了……
如果硬要说人家是“污染”,那你去看看ruby世界的东西,open class还不是大逆不道啊?呵呵

污染就是污染不用说什么个人喜好,open class就是故意给别人来"污染"的
12楼  dempire 2008-08-14

看得出来,楼主和下面喜欢抨击prototype的人都是菜鸟!
可能高手和菜鸟的区别就是高手研究事物,菜鸟使用事物
 1 2 3 4 5 6    
您的发言将按有关规定都会存档,您须为所发表后果负责,请您遵纪守法并注意语言文明。
标题:jquery和prototype框架的比较。。。
热门关注
标题回复点击
[源码]XiorkFlow:用JavaScript写的工作流设计器73540
推荐一个不错的免费JavaScript开发工具,比aptana轻得多~~70425
jquery和prototype框架的比较。。。62370
大胆预测下JS框架的走势106357
开心网【朋友买卖、咬人、争车位】Firefox插件118307
Mootools前景?拿来主义VS重复发明轮子102301
Mootools和Jquery之间的选择问题60270
Mootools、jQuery之说三道四64246
js操作html的table,包括添加行,添加列,删除行,删除列,合并单元格(未实现)29214
关于Gecko的eval第二参数探密51209
搜索墙@2009 www.pkwall.com all rights reserved QQ:276471788 [京ICP备09111534号]
声明:本站部分数据来源于网络,仅供参考,如有版权问题,请联系我们,我们将及时删除!转载本站请注明来源