`

我为什么选择mootools,抛弃了prototype. (mootools与prototype 核心代码分析)

阅读更多
我为什么选择mootools,抛弃了prototype. (mootools 与 prototype 核心代码分析)


===========================================
前言
===========================================

最近喜欢上了mootools(相见恨晚啊),在公开表示了对他的偏爱.
很多朋友都问我为什么要移情别恋,其实理由还是蛮多的.

今天在这里打算列举出一部分.让更多的朋友能够了解一下mootools,也希望有更多的朋友喜欢上他.


文章的标题注定了我会更多的讲述 mootools比prototype好的地方,
希望大家不要被我的误导,以为mootools处处都比prototype好.
mootools还是有一些不足的.


本次对比针对 mootools 1.11版 和 prototype 1.51版,
只比较了一些核心代码,其他的工具方法,辅助函数不再本文讨论之内.


开始前,再次重申一遍:我曾经很爱prototype,而且我将永远都会用"伟大"来形容它.


好 下面对比正式开始 (
mootools以下简称moo.
本文所引用的代码, 只是起到说明作用,不保证他们都可以被正确的执行.
同时为了使本文简洁一些,引入的 一些 moo和prototype的代码也只是片段或是伪代码.
)

===========================================
一. 类机制
===========================================


js里的类实际上就是function.
如果不使用任何框架和组件,那么想创建一个自己类也不是难事,方法如下:

var PersonClass=function(name,gender){
	this.name=name;
	this.gender=gender;
	alert("My name is "+this.name);
}

var myGirlFriend=new PersonClass('Vickey','female');



执行 后, 会创建一个PersonClass类的实例myGirlFriend, 并执行function内的语句.
那些语句可以理解为是类的构造函数.



Prototype
现在来看看在prototype的帮助下如何去定义这个类:
var PersonClass = Class.create();

PersonClass.prototype.initialize=function(name,gender){
	this.name=name;
	this.gender=gender;
	alert("My name is "+this.name);
};

var myGirlFriend=new PersonClass('Vickey','female');

//如果想给类增加属性和方法时使用 
PersonClass.prototype.XXX=...;
//或者是使用 prototype提供的 
Object.extend(PersonClass.prototype, {...} );


(关于Object.extend稍后在对比继承机制时再细说.)


再来看看prototype是实现类机制的核心代码.
var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}


通过看代码不难看出,prototype的Class实际上只是帮助我们抽象出了"类的构造函数".
而当我们在prototype的这种机制下进行类的定义时,实际上带来的好处是非常有限的.
prototype的Class只是从结构对我们的类进行了重新规划. 而这样的规划意义并不是很大.
而且prototype带有强制性,即, initialize 是必须要定义的.
实际上这里存在一个缺陷, Class应该提供一个默认的initialize(一个空函数就好),
或者是在create返回的function里进行必要的判断.
(prototype1.6的类机制变化比较大,但是还没仔细研究过,所以不敢轻易评论).


Mootools

现在来看看在 moo的帮助下如何去定义一个类:
var PersonClass = new Class( {
	initialize: function(name,gender){
		this.name=name;
		this.gender=gender;
		alert("My name is "+this.name);
	}
});
var myGirlFriend=new PersonClass('Vickey','female');

其中类的 initialize 不是必须的.
如果你想给 PersonClass 增加属性和方法,你可以在new Class的参数里直接以 json方式定义.
也可以使用 如下方式
PersonClass.implement ({ 
	age:0 ,
	getName : function() {return this.name;}
} , {...}, ..... );

implement支持多个{}.关于implement稍后在对比继承机制时再细说.


在来看一下moo类机制的一些核心代码.

var Class = function(properties){
	var klass = function(){
		return (arguments[0] !== null && this.initialize && $type(this.initialize) == 'function') ? this.initialize.apply(this, arguments) : this;
	};
	$extend(klass, this);
	klass.prototype = properties;
	klass.constructor = Class;
	return klass;
};

Class.prototype = {
	extend: function(properties){
		var proto = new this(null);
		for (var property in properties){
			var pp = proto[property];
			proto[property] = Class.Merge(pp, properties[property]);
		}
		return new Class(proto);
	},
	implement: function(){
		for (var i = 0, l = arguments.length; i < l; i++) $extend(this.prototype, arguments[i]);
	}

};



代码的具体原理就不细说了.大家在moo的Class里看到了 extend 和implement,那下面就来具体说一说moo和prototype的 继承机制吧.


===========================================
二. 继承机制
===========================================

Prototype
prototype提供的继承很简单.
Object.extend = function(destination, source) {
  for (var property in source) {
    destination[property] = source[property];
  }
  return destination;
}


他只是把source里的属性赋给destination,同时会覆盖destination里的同名属性.
他可以用于对象,也可以用于类,当要实现类的继承时,destination要使用 MySubClass.prototype.

prototype的继承机制可以说是非常薄弱的.


Mootools

moo提供了三种继承机制:

首先他也提供了简单的继承机制:
Objcet.extend (注意,不是上面代码中 Class 里的 extend)
他的代码如下

var $extend = function(){
	var args = arguments;
	if (!args[1]) args = [this, args[0]];
	for (var property in args[1]) args[0][property] = args[1][property];
	return args[0];
};
Object.extend = $extend;

他的使用方法和 prototype 完全一样.

但是大家可能注意到了 这句 if (!args[1]) args = [this, args[0]]; 这句的纯在使得下面的代码写法成为可能.
var myObjcet={....};
myObjcet.extend=$extend;
myObjcet.extend(objA);
myObjcet.extend(objB);
myObjcet.extend(objC);


简单的一句话,让extend的用法增加了更多的灵活性,不得不赞一个了!!!

下面说说重点, moo的类里的extend和 implement
先说 implement,之前已经说了一些了

var MyClassA = new Class();
MyClassA.implement( { methodA : function() {... } }  );


执行后 MyClassA 将拥有 methodA.

implement用来向类中添加属性和方法(会覆盖同名属性和方法),相当于
Object.extend (MyClassA.prototype , {... } )
但是Object.extend 不支持多个source,implement可以,示例如下:
MyClassA.implement( objA , objB, objC ... );


下面来看看moo的Class.extend.
moo的Class.extend才是我们期待的真正的"类继承",看一下官方的示例


		var Animal = new Class({
			initialize: function(age){
				this.age = age;
			}
		});
		var Cat = Animal.extend({
			initialize: function(name, age){
				this.parent(age); //will call the previous initialize;
				this.name = name;
			}
		});



看那个parent() !!!!
通过moo的Class.extend实现的继承提供一个关键的方法 parent().
使用他你可以调用父类中的同名方法,好像java里的super一样.
这个示例已经可以说明一切了.


关于prototype和moo的类机制和继承机制的对比就到这里,孰优孰劣大家心里应该有数了吧.

===========================================
三.抽象对象
===========================================


再来看一看"抽象对象". 这个虽然对于开发人员来说用处不大,但还是对比一下吧,小细节也能看出作者的用心.

Prototype
prototype的抽象对象很简单
var Abstract = new Object();
具体的意义不大.


Mootools
moo的的抽象对象相对更完善一些.
var Abstract = function(obj){
	obj = obj || {};
	obj.extend = $extend;
	return obj;
};

支持自定义抽象(以参数形式传入),同时会为抽象对象自动添加extend方法.


===========================================
四. 关于 $()
===========================================

Prototype
prototype的$大家都比较熟悉了, 工作原理就是
通过id取得一个页面元素(或者直接传入一个页面元素对象),然后给他增加一些prototype提供的方法和属性,来方便开发人员对页面元素的使用.


Mootools
moo在这方面做的差不多.
不同的主要有两点, 首先moo为页面元素增加的方法和属性与prototype的不同(这个稍后会介绍),另外一个不同是moo的$兼具了对象管理的一个功能.
他引入了一个  Garbage 类, 来对页面元素进行一个统一的管理和回收(主要是回收).
可以更好的减少js(或浏览器)造成的内存泄露等问题.

具体的大家可以看一下代码,在这里就不详细说明了.


===========================================
五.关于 Array Enumerable Hash
===========================================


prototype 和 moo 都提供了集合迭代方法 (each)
这个网上已经有一篇不错的对比文章,我就不在这里重复了
http://blog.fackweb.cn/?p=50.


moo的 forEach/each方法: function(fn, bind){..}
那个bind 结合代码 和 上面那篇文章, 大家应该可以很好的看出来prototype和moo的不同与优劣.


prototype里面有 Enumerable 的概念,moo没有.
但是我个人一直觉得 Enumerable 比较鸡肋.
在实际开发中,很少使用.
Enumerable的功能完全可以 用普通json对象 或者是 Hash来实现.
moo的作者也许同样这么认为.所以 不再 设置一个 鸡肋的 Enumerable类.
但是请大家放心, Enumerable 能做的事情, 在moo里也能完成.

可以理解为

moo的 Array +  Hash +{} 完全可以接替 prototype的 Array + Enumerable + Hash +{}
当然对于一些工具方法两者提供的都不太一样,不好比较,但是那些方法都是附属品.
我们完全可以自己来实现,所以不在这次的比较范畴之内.


===========================================
六. 关于 Element
===========================================

两者的 Element 从作用上看类似.都是一种对页面元素的包装,为页面元素添加了一些诸如 addEvent remove style之类的方法.
但是大家通过看代码可以发现 moo的实现明显更简洁 更OO.

同时还有一个关键的不同,prototype又提取出了一个Form对象,里面包含了很多表单相关的方法.
同时还衍生出了 serializeElements Method 等等很多类和方法,代码瞬间变得异常复杂和难以琢磨.


而moo中没有Form对象,在moo中,Form本身就是一个Element 他没什么特别的,这样的思想类似components模式
普通Element具备的方法 Form 都应该具备, Form具备的方法 Element也都应该包含.form 和 其他页面元素没什么不同.
form元素只是一个包含了 input select textarea等子元素,同时拥有action target等属性而已.
一个div 一个span 一个td... 同样可以包含input select textarea子元素,同样可以拥有.action target属性.
浏览器处理他们的方式可能不同,但是在moo面前,大家完全平等.


其实prototype里 form和普通页面元素几乎也是平等的,但是问题就是,既然是平等的,又何必硬生生的造出Form以及那么多的衍生物呢?



===========================================
七.Ajax
===========================================

Prototype
prototype的ajax实现主要是靠一个 Ajax类 来实现.(但是这个类形同虚设,大家更多的是和 Ajax.Request 类打交道.


先来看一个prototype下一个简单的ajax提交实例:
var myAjax = new Ajax.Request( url,{parameters: myData , onComplete: callBackFunction } );

其中 myData 可以是字符 : "name=Vickey&gender=female";
也可以是对象 { name : Vickey, gender : female }


Mootools
moo首先在将ajax机制分层.提取出了一个基类:XHR.
目前XHR有两个子类, 一个是 Ajax ,另一个是Json.Remote.

在moo下一个简单的ajax提交实例:
 var myAjax =new Ajax(url, {data : myData , onComplete: callBackFunction  }).request();

大家可以看到request成为了Ajax对象的一个方法,这样的设计显然是更合理更自然 也更OO的.

而且关键的一点是,你可以提前创建好你需要的ajax对象.在需要发出请求时再发出请求.

 var myAjax =new Ajax(...);
.....
 myAjax.request();

同时还有一个重要特性, request是支持参数的,这个参数就是你要提交的数据.

也就是说,你可以在new Ajax时不指定数据或者指定一个默认数据.
在提交的时候可以提交另一个data.如.

myAjax.request(yourData);

其中data可以是字符串,可以是对象, 也可以是一个页面元素.

要用ajax提交一个form 或者一个 div下的所有表单元素,只是改变一下 myData.
var myData= $("formID");  // var myData= $("divID");
然后就和普通的ajax提交完全一样了.

myAjax.request(myData);

当然还有更oo的方式 :
myData.send({onComplete: callBackFunction });

用后一种方式的时候要保证提交的元素有action属性,没有你就赋一个 myData.action=url.
prototype里如何实现这一功能呢??


Prototype
Form.request($("formID") ,{ onComplete: callBackFunction });

当然prototype里也可以类似moo的做法 , 只要让myData=$("formID").serialize(true) 就可以了.
但是这一个小小的不同,反映出了设计上的差距.


Mootools
moo的Json.Remote类,简单,但是很实用:

	var jSonRemoteRequest = new Json.Remote( url , {onComplete:callBackFunction }).send({name: 'Vickey',gender: 'female' });

这个类和Ajax类的本质区别是,
他提交的是一个序列化后的 json字符串("{name: 'Vickey',gender: 'female' } "),而不是把 json对象转化成QueryString ("name=Vickey&gender=female");



===========================================
结束语
===========================================

写这篇文章不是要批评prototype,以我现在的水平还没那个资格.
只是和mootools对比后, prototype在设计上的不足立刻就显现了出来.

虽然prototype新版本变化很多,很多我上面提到的一些不足都改正了,而且也加入了很多以前不具备的新的特性.
但是prototype现在的发展停留在:"修补不足,增加功能"的阶段,而没有从设计上进行深层次的重构,所以我不认为他在mootools面前有足够的底气.

至于jquery我没有深入研究过,但是它的设计觉得完全是prototype风格的, 注意,我说的是设计风格,而不是代码风格.
代码上他可能写的更精妙,更有趣,但是设计上依然是prototype风格:薄弱的类机制,靠简单的extend支撑起整个系统.
JQuery在很多方面很出色,但是归根结底他和prototype走在一条路上,只是在有些方面他走的更快.


mootools并非完美无缺,但是至少现在他美的地方比prototype更多,缺的地方比prototype更少.

所以,我选择mootools. 你呢??

不要听评论,不要看介绍, 只要看看他们的源代码, 同时动手用他们写些东西, 你的答案自然会浮现出来.



分享到:
评论
32 楼 fins 2007-09-13  
其实我没有比较他们内部的实现,也没有比较他们的风格,我的比较很简单.
就是把同样的函数拿出来比, 看谁的用起来更舒服,或者谁考虑的更周全.

至于JQUERY我多次重申 我对它不了解,只是简单的看了看,归根结底我是不喜欢它的晦涩 和故弄玄虚.
不知道你听过"老罗语录"没,里面关于对金庸 古龙的评价那段我觉得说的很有道理.
古龙的文字第一次看到又酷又炫,但是时间久了人们才发现,还是金庸的朴实无华更动人心(当然他讲的要有意思得多,如果没听过建议听听.
老罗还在里面引用了两句话,我觉得更是精辟:"时间对于别出心裁的小花招是最无情的","过份依赖这些稀奇古怪的小花招导致结果价值受到削弱,经不起时间考验".
31 楼 Tin 2007-09-13  
我觉得fins同学的一些说法会造成没有深入使用这几个框架的朋友的误解。因为这几个框架的思想是不一样的,所以它们的语法也是不同的。fins同学的评价似乎更像从Java的OO想法来评价几个js框架。
其实,moo一开始的想法就是light weight,所以它的很多语法其实就是没有语法。fins说的json语法,其实就是js里面的散列对象嘛,javascript语法本来就是这个样子呀,不包装就是这样。而这种方式如果写的好读起来很像DSL,很舒服,moo充分发挥了这个好处。
prototype和JQuery都没有强调继承这样的概念。javascript的强大很大就来自它的原形继承,如果要用好它就要利用好原形继承。prototype在这方面很像Ruby,比如Enumerable,这是一种按照行为的抽象,很符合Ruby/Python里面Module的想法,并非所有行为都要抽象到一个对象再继承,行为本身也可以抽象再混入。
JQuery我觉得像Python。write less do more这个想法也比较pythonic。在这个框架中有很强的函数式编程的味道,其实javascript已经具备了函数式编程的语法能力,所以使用FP的强大是JQuery受欢迎的原因之一。

说回来,还是流派原因。moo的产生比前两者要晚。prototype已经开始走大而全的路子了,而且配套的script.aculo.us也是越来越臃肿(而且这个特效库的代码质量的确不怎么好),但是要看到RoR里面使用RJS简化Ajax应用开发都得益于这些大而全的库,所以我们也没什么可抱怨的,只能说没有使用RoR少享受点便利吧。JQuery继续保持它的优美,插件也越来越多,我了解到的很多使用Django进行Web开发的朋友都在用JQuery。而moo,越来越受欢迎,我们也要认真关注它的体积,如果它能持续保持苗条,那么轻量级Web项目就很有可能越来越多的选用它。
每年学一门新语言,学两三个新框架,肯定是有益的。fins转阵营说明你也在拥抱变化呀:D
30 楼 ueseu 2007-09-12  
我也喜欢jquery

比如把checkbox当radio使用

$("#aa input:checkbox").click(function(){
  if(this.checked)
    $("#aa input:checkbox:checked").not(this).attr("checked", false);
});
29 楼 agile_boy 2007-09-12  
楼主分析的很中肯。
我个人也很喜欢mootools,一来小巧,比较OO,其次其提供的封装,我使用起来比较顺手,再就是对一些基本的特效提供了很好的封装。。总之你是扩展mootools也好,使用mootools开发也好,感觉比较舒服尤其习惯OO的开发者。
另外本人就在mootools的基础上开发了一个简单的网路拓扑管理的东东
https://sourceforge.net/projects/webtopology/
28 楼 sp42 2007-09-11  
Skin is easy to be modiflied by CSS sprite as the way of ext did ....
27 楼 fins 2007-09-10  
呵呵 不错 虽然我不认为比EXT默认风格好看
但是确实非常不像EXT了

其实EXT作者选择的默认风格遵循了一条很简单的原则:当你不能确定对方喜欢什么颜色时,那么你就选择蓝色吧 呵呵

蓝色+灰 + 白 +黑(再红绿橙黄做小小的点缀 ) 这样的搭配能符合绝大多数人的审美 呵呵

感觉这帖子跑题跑的比较厉害啊

从mootools跑到jquery 又跑到ext 现在又跑到美工了 哈哈
不过这样的跑题还是比较有意义的


26 楼 sp42 2007-09-10  
引用
我现在看那种蓝色调确实有些恶心了,可能你也会有那一天的!

把skin交给美工修改。
用EXT做的,但修改过SKIN,相信这样能够不会“一下子”看出是EXT做的:
25 楼 yxylwt 2007-09-10  
佩服啊
24 楼 fyting 2007-09-10  
jquery的代码量确实很少,呵呵献个丑。但是我觉得在工程中使用不太好,因为需要对CSS,xhtml有一定了解,看似简单的代码其实是通过与良好的HTML风格搭配实现的。写起来有一种极其流畅的感觉,不过读起来就不是那么一目了然,如果自己做东西,用这一套肯定很爽。
删除表格中选定了checkbox的行
$("table#my_data_grid input:checked").parents("tr").remove();

类似WindowsXP侧边栏那种折叠/打开功能
$(document).ready(function(){
            $(".fold .fold-button img").click(function(){
                $(".expand",$(this).parents("div.fold")).toggle();
            });
        });

HTML代码
<fieldset>
    <legend><b>具有的角色</b></legend>
	<div class="fold">
        <div class="fold-button">
            <img src="../images/close.gif" />
        </div>
        <div class="expand">
            <ul>
                <li><a href="../role/角色信息.html">角色1</a></li>
                <li><a href="../role/角色信息.html">角色2</a></li>
                <li><a href="../role/角色信息.html">角色3</a></li>
            </ul>
        </div>
	</div>
</fieldset>
<fieldset>
    <legend><b>禁止的角色</b></legend>
	<div class="fold">
        <div class="fold-button">
            <img src="../images/close.gif" />
        </div>
        <div class="expand">
            <ul>
                <li><a href="../role/角色信息.html">角色8 </a></li>
                <li><a href="../role/角色信息.html">角色9 </a></li>
                <li><a href="../role/角色信息.html">角色10</a></li>
            </ul>
        </div>
	</div>
</fieldset>
23 楼 fins 2007-09-10  
radar 写道
我的出发点不是做项目和系统,从学习角度来看jQuery很好。
我们项目中用了yui,ext0.3,prototype.js,dwr
没有用jQuery,但我从研究学习角度很喜欢jQuery。
说说原因:
    1、jQuery本身提供功能”不多“。其实很多了
    2、需要plugin才能有很多功能。
    3、最重要的。我手下人包括我驾驭不了jQuery。因为jQuery太灵活了,需要很多灵感创意才能用好它!
   4、css,xpath 表达式很多人不熟悉。

jQuery的作者就在mozilla工作,对javascript的理解和使用很是到位。看代码就知道了!

预告一下,过几天我放一段jQuery代码解读!


非常期待
22 楼 radar 2007-09-10  
我的出发点不是做项目和系统,从学习角度来看jQuery很好。
我们项目中用了yui,ext0.3,prototype.js,dwr
没有用jQuery,但我从研究学习角度很喜欢jQuery。
说说原因:
    1、jQuery本身提供功能”不多“。其实很多了
    2、需要plugin才能有很多功能。
    3、最重要的。我手下人包括我驾驭不了jQuery。因为jQuery太灵活了,需要很多灵感创意才能用好它!
   4、css,xpath 表达式很多人不熟悉。

jQuery的作者就在mozilla工作,对javascript的理解和使用很是到位。看代码就知道了!

预告一下,过几天我放一段jQuery代码解读!
21 楼 radar 2007-09-10  
fins 写道
其实比较好的做法是 moo还是提供一个命名空间
例如 moo.Ajax moo.$extend.....
然后自己再做一个桥  把这些东西挂到window的根上.

例如

Ajax=moo.Ajax
$extend=moo.$extend...
当开发者不希望moo的东西都挂到window下时,可以不引入那个桥



yui作者当初面对这个问题时,和你是相同的答案。
20 楼 radar 2007-09-10  
再说UI这块。我个人觉得这块对lib选择很重要。
你们也同意一个项目不用n个lib吧?

那如果你选择一个对UI支持不好的lib怎么办。例如,选择了prototype.js,你还要用它的很多扩展项目,当然你也不是很愿意。

mootools对UI支持的不错。yui-ext更是。

但我提个问题,你对UI的热衷,是你对xhtml+css的生熟造成的。你同意吗?

为什么我对yui-ext有上面的说法。

yui对UI的支持进度太慢了。jack等不及,自己写了一些UI,grid,tab,tree,dialog... ...。
为什么大家都选ext,是看中它的UI。基础lib呢?用的有多少?

我不是批判ext,我只是说出它的特点来,UI很好.





说实话,如果用yui-ext的项目多了,客户会有审美疲劳的。我现在看那种蓝色调确实有些恶心了,可能你也会有那一天的!
19 楼 fins 2007-09-10  
其实比较好的做法是 moo还是提供一个命名空间
例如 moo.Ajax moo.$extend.....
然后自己再做一个桥  把这些东西挂到window的根上.

例如

Ajax=moo.Ajax
$extend=moo.$extend...
当开发者不希望moo的东西都挂到window下时,可以不引入那个桥

18 楼 radar 2007-09-10  
其实都怪我带着大家跑题了!

我的意思不是否定什么,推荐什么,我的出发点是从lib本身特性来讨论。指出某个lib可能有的问题是为了大家去避免它。例如:package的问题,用mootools开发的系统交付给用户肯定会没问题的,因为你既然使用的mootools肯定会避免这个问题,遇到变量重复,代码也不会测试通过。但指出来不一定要求作者改或和你争论。也只是提出问题罢了!
17 楼 fins 2007-09-10  
呵呵
"jQuery可以一行代码搞掂很多问题" 还有他那句著名的 write less,do more. 似乎都在告诉人们 jquery能很简单的搞定很多事情.

但是问题是  jquery能, 别的js框架也能啊

其实对于绝大多数的常用的情形,单纯从使用角度来讲, 那些js框架都差不多. 要比拼的还是内在的代码设计 效率 以及一些辅助功能等.
在这些方面 jquery并没有绝对优势.

个人看法,而且我承认对jquery不了解.

当然我不是 "反jquery派",我只是找不到足够好的理由可以说服我自己去使用jquery 而放弃熟悉的prototype或者是放弃优秀的mootools.

16 楼 sp42 2007-09-10  
现在js也用上很多设计模式的理念了。
就把“搞掂很多问题”的问题交给“设计模式”吧
15 楼 sp42 2007-09-10  
嘻嘻~问Jack~小弟也没怎么接触过jq
14 楼 fins 2007-09-10  
"jQuery可以一行代码搞掂很多问题"
这个举两例呗
我没有认真研究过jquery 很多问题都理解的不到位 例如"jQuery可以一行代码搞掂很多问题"

具体怎么搞定呢? 我觉得 一行代码搞定很多问题 的关键不是代码怎么写 而要看 那很多问题是什么问题.
13 楼 sp42 2007-09-10  
引用
ui在ajax lib选择时很重要。如果yui-ext的ui做了不好,估计根本没有现在的光景。借了yui的光,现在还自立门户。呵!

YUI-EXT的成功也就在ui上。你们认为呢?


“jQuery最大的优点是易用。 jQuery可以一行代码搞掂很多问题。 YUI最大的优点是它被设计为面向对象的(object oriented)和组件的架构(component architecture)。”
《EXT设计模式初学习》
http://www.iteye.com/topic/121946

相关推荐

    mootools.js插件 1.4.5 core下载.zip

    Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比Prototype.js多,整体设计 也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等。  官方网站:...

    mootools/prototype的动画效果库moo.fx

    总的来说,Moo.fx作为MooTools的一部分,为开发者提供了强大的动画解决方案,而Prototype.lite.js则提供了原型库的核心功能。两者各有特色,可以根据项目需求灵活选择或组合使用。了解和掌握这些工具,能够显著提升...

    jQuery、Mootools、Prototype三大JavaScript框架中文手册

    JavaScript是Web开发中不可或缺的一部分,它为网页添加了动态交互性。然而,原生JavaScript的API庞大且不统一,为了简化开发,社区创造了一系列的框架,其中jQuery、MooTools和Prototype是三个非常著名的JavaScript...

    mootools demo打包_mootools.svn.js_中文手册.zip

    《MooTools:JavaScript框架的探索与应用》 MooTools是一款强大的JavaScript库,它以其模块化、面向对象的设计理念,为前端开发提供了丰富的工具和功能。本篇将围绕"Mootools demo打包_mootools.svn.js_中文手册....

    mootools手册.rar

    Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等等。总之,Mootools...

    mootools源代码说明

    Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比 Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等等。总之,...

    prototype 开发应用手册,笔记,prototype.js文件下载

    Prototype.js文件是这个库的核心,它包含了大量的实用函数和扩展,使得JavaScript编程更加高效且易于维护。 Prototype库的核心理念是扩展JavaScript的基本类型和对象,以便在进行DOM操作、事件处理、Ajax通信等方面...

    MooTools 帮助文档 中文

    Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等等。总之,Mootools...

    mootools和prototype的开发文档

    Prototype引入了`Object.extend`和`Function.prototype.bind`等方法,增强了JavaScript的面向对象编程能力。同时,它还提供了一种称为“原型链”的继承机制,允许对象间共享方法和属性。 #### 1.3 AJAX与效果 ...

    mootools中午手册

    Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等等。总之,Mootools...

    Mootools v1.11 文档中文版

    Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等等。总之,Mootools...

    mootool API中文说明

    Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等等。总之,Mootools...

    MooTools

    Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等等。总之,Mootools...

    MooTools1.4中文PDF手册+MooTools-Core-1.5.1.js

    - **与其他库的关系**:MooTools与jQuery、Prototype等其他JavaScript库在功能上有许多相似之处,但MooTools更注重代码的组织结构和可维护性。 - **互操作性**:MooTools允许在项目中与其他库共存,通过NoConflict...

    mootools-core-1.5.1

    Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等等。总之,Mootools...

    mootools帮助文档

    Mootools从Prototype.js中汲取了许多有益的设计理念,语法也和其极其类似。但它提供的功能要比Prototype.js多,整体设计也比Prototype.js要相对完善,功能更强大,比如增加了动画特效、拖放操作等等。

    prototype1.6和mootools1.2.3在本人目前工作中比较常用的方法比较

    在JavaScript的世界里,Prototype 1.6 和 MooTools 1.2.3 是两种非常流行的JavaScript库,它们都为开发者提供了丰富的工具集,简化了DOM操作、事件处理、动画效果等任务。这篇博客将深入探讨这两个库在实际工作中的...

    jquery,mootools,ext3,prototype对class选择符速度比较

    标题中的"jquery,mootools,ext3,prototype对class选择符速度比较"指的是对四个流行的JavaScript库——jQuery、MooTools、EXT3和Prototype——在处理CSS类选择器时的性能进行的比较测试。这些库在Web开发中广泛用于...

    Prototype、JQuery和Mootools的概要图

    Prototype、jQuery和MooTools是三个非常流行的JavaScript库,它们都旨在简化JavaScript编程,提高开发效率。下面将对这三个库进行详细介绍。 Prototype是最早的JavaScript库之一,由Sam Stephenson于2005年创建。它...

Global site tag (gtag.js) - Google Analytics