《概述》

之前一直用Jquery, 但那只是一个工具,没有深入到底层的实现源代码上, 为了有更好的提升自已,Google了对比了YUI, Jquery, Mootools,prototypejs, 腾讯, 淘宝的几个库。 Jquery大部分人说源代码太高深,没有按面向对向的思想来设计,YUI学习曲线太长, 腾讯和淘宝的可能因为是国内公司自己的设计的库,有了一定库的设计基础后可以想想他们为什么这样实现。所以对于入门了解库的思想及代码可读性来说,还是选择了Mootools.它可以按TYPE, Class, Array, Function等,把每个核心的代码下载下来学习。

参考的资源有:

1. Pro+JavaScript+with+MooTools 整体讲解mootools 的一本书

2. Mootools.net

以下内容是通读了Mootools 的源代码后在在结合书中内容,提出的总结


章节 1. 类型 TYPE

类型的处理主要是用来处理数据,比如说你可以把两个数字相加,但是不能把一个数字跟一个对象相加,Javascript主要的类型判断方法为 typeof运算符。但 typeof 运算符有一个缺点是只能判断常规的几种类型,如数字,字符, 函数, 对象等。

console.log(typeof 42); // 'number'

console.log(typeof true); // 'boolean'

console.log(typeof 'hello'); // 'string'

console.log(typeof function(){}); // 'function'

console.log(typeof {name: 'mark'}); // 'object'

而没有办法区分以下类型:

console.log(typeof {name: 'mark'}); // 'object'

console.log(typeof [1, 2, 3]); // 'object'

console.log(typeof new Date()); // 'object'


Mootools 的type做为最核心的库,主要就是解决这个问题。那为什么不直接使用 Mootools的Class来实现这个定义呢?比如在Class的返回的构造函数里面定义一个判断标识,其实自已新定义的类是没有问题,但Array, Date等原生对象,没有办法改变它的构造函数。所以要定义一个新的TYPE类。

TYPE类只是给Array增加一个新的属性和方法。

章节 1.1 TYPE类的设计要求

a. 创造一个类型构造函数 new Type('Array',Array); 第一个参须为必须的,代表新的类型的名称, 第二个为对象,返回的值为第二个传入的对象,这里为Array构造函数。如果没有传入第二个值,返回空。

new Type('name', option); 不能改变传入option对象的原型,只能增加option对象的属性及方法

b. 定义全局方法typeOf(item); 返回其相关类型,如 var A=function(){}; new Type('Atype', A); var a=new A(); console.log(typeOf(a)); //Atype;

c. 定义全局方法instanceOf(Array,Type); //区别于 Array instanceof Type为false, 这里为true. 即比较Array.$constructor==Type. $constructor为扩展的属性