C#中,Java中,我们可以以dll和Jar的形式将我们常用的代码进行封装,然后复用,JS中可以不可以?当然可以,要不然这么多框架。

C#和Java中,我们可以定义自己的命名空间,类,然后在类中定义自己的方法,在使用的时候,只需要实例化类,然后使用对象即可,JS中没用命名空间和类的概念,JS中有一个非常重要的对象window这个就是全局对象,也可以认为这个是JS中唯一的命名空间,我们可以将自己的对象函数都附加在这个对象上,以供日后使用,这归功于JS对象的动态功能JQuery的源码打开看看,那个著名的$其实就是附加在windows上。既然是动态的,有没有觉得这个对象跟C#中的命名空间类似,在这里我就牵强附会的生拉硬套一个,将这个看做“特殊的对象”,那么我们可以在任何时候去给windows添加,看下面的用法。

 

 

//下面的代码在window对象中创建一个属于自己的对象或者命名空间,并把自执行函数中的方法附加到这个对象上,以便于我们调用这个自执行函数中的一些功能。  
(function() { 
//根据id获取对象 
function   _$(id) { return document.getElementById(id); } 

//创建一个自己的对象相当于C#中的命名空间(javascript中没有命名空间这个说法,刚才已经说了牵强附会)
window.liuyu = {}; 

//将内部函数_setStyle封装在mySpace命名空间内 
window.liuyu.$ = _$; 
})(); 

//测试代码 
window.onload = function() { 
var divtest=window.liuyu.$("testdiv");
} 


//如果不使用这种方法,那么,下面的方法也可以实现的。

 
window.liuyu= {}; 
window.liuyu.$ = function(id) { return document.getElementById(id); } 
//测试代码 
window.onload = function() { 
var divtest=window.liuyu.$("testdiv"); 
} 

 

两种做法实现的功能是一样的,都体现了JS对象的动态作用,但是第二方法更加的直观,易于理解。代码完全裸露在外。而第一种方法通过一个匿名函数将其封装,而且是通过闭包的形式,闭包相当于一个类,这种形式保护了自执行函数内的方法、变量、属性等。这样代码更加安全了。

posted on 2013-04-23 13:51  醉意人间  阅读(1274)  评论(0)    收藏  举报