Building a chainable javascript library
到目前为止你只是chained大多说常用函数的一小部分,但是你能进一步扩展这部分的内容。建一个库包含其他的常用函数是一个好的选择。他不需要成百上千的代码块。代码的长度取决于在库之外的需求。你们看到一些常用库的内容。从他们那里得到代码。以下是常用库的基本构成。
1.Event 添加和移除时间监听函数,normalizing 时间对象。
2.DOM 管理css类的名称和样式的管理。
3.ajax 对xmlhttprequest对象进行管理。
库的框架如下:

The structor of chain lib
1 Function.prototype.method=function(name,fn){
2
3 this.prototype[name]=fn;
4
5 return this;
6
7
8
9 }
10
11 (function(){
12
13 function _$(els){
14
15 //
.
16
17 }
18
19 //event
20
21 _$.method('addEvent',function(type,fn){
22
23 //
.
24
25 }).method('getEvent',function(e){
26
27 //
.
28
29 }).
30
31 //dom
32
33 menthod('addClass',function(classname){
34
35 //
36
37 }).method('removeClass',function(classname){
38
39 //
40
41 }).method('getStyle',function(prop){
42
43 //
44
45 }).method('setStyle',function(prop,val){
46
47 //
.
48
49 }).
50
51 //ajax
52
53 menthod('load',function(url,method){
54
55
56
57 });
58
59 window.$=function(){
60
61 return new _$();
62
63 }
64
65
66
67 })()
68
69
现在这个API已经就绪,考虑谁用这个库还有用户在哪种文档中使用这个库很重要,如果有一个已经存在的API使用了这个dollar函数。这个库将被重写。一个简单的解决方式是改变$函数的函数名。然而这不是完美的解决方法。一个更好的解决方式是添加一个installer。下面是一个例子。

The solution of overwrite
1 (function(){
2
3 function _$(els){
4
5 //
.
6
7 }
8
9 //event
10
11 _$.method('addEvent',function(type,fn){
12
13 //
.
14
15 }).method('getEvent',function(e){
16
17 //
.
18
19 }).
20
21 //dom
22
23 menthod('addClass',function(classname){
24
25 //
26
27 }).method('removeClass',function(classname){
28
29 //
30
31 }).method('getStyle',function(prop){
32
33 //
34
35 }).method('setStyle',function(prop,val){
36
37 //
.
38
39 }).
40
41 //ajax
42
43 menthod('load',function(url,method){
44
45
46
47 });
48
49
50
51 window.installHelper= function(sco,interf){
52
53 sco[interface]= function(){
54
55 return new _$(arguments);
56
57 };
58
59 }
60
61
62
63 })()
64
一种可能的实现如下
installHelper(window,’$’);
$(‘aa’).show();
下面是一个更为复杂的例子,在这个例子中你能向预定义的命名空间对象中添加函数。

More complex example
1 window.com= window.com || {};
2
3 com.example=com.example || {};
4
5 com.example.util=com.example.util || {};
6
7 installHelper(com.example.util,'get');
8
9 (function(){
10
11 var get=com.example.util.get();
12
13 get('example').addEvent('click',function(e){
14
15 get(this).addClass('hello');
16
17 });
18
19 })()
20