代码库:顾名思义,就是放代码的仓库。在Javascript若大的一个仓库中,我们可以开辟自己的一个小仓库,存放自己编写的代码。那如何开辟自己的小仓库呢,它有什么意义呢?下面谈谈我的理解。
1、创建代码库
大家编程的时候,应该会遇到这样的问题,比如去空格,向某个元素后面插入一个元素,浏览器的某些兼容等问题;它们出现的频率很高,解决的方法却是相同的(函数相同)。在这种情况下如果我们仍然在写重复的代码,是不是就有些太过机械化了呢。这让我想到了“面向对象的思想”------>把相同的东西抽出来放到单独的类中,用的时候可以通过继承或调用以解决问题,这样实现了代码的复用,提高了编程效率。在这里我们就可以利用代码库,来解决代码上面重复问题。
2、创建命名空间
在创建自己代码库之前,我们往往会先开辟一块自己的空间,也就是所谓的命名空间;然后再存放那些常用的代码。
大家都知道,命名空间可以解决命名冲突的问题。在这里之所以先创建它:当然也是有原因的,呵呵下面就听我细细道来:
我们知道面向对象编程中出现多个同名函数,根据参数个数和返回类型决定实现那个函数,很好的实现了功能的扩展,这就是所谓的重载。然而在JavaScript也可以出现多个同名函数,不同的是它总是执行最后一个,前面的被忽略掉;也就是说Javascript中存在的是虚假的重载,而并非真正意义上的重载。这样就可能会导致应该实现的功能,没有实现的现象。所以我们就引入命名空间,避免函数的重名来解决功能被覆盖的问题。
因为自己对自己空间的东西了如指掌,空间内命名重复的现象几乎可以杜绝;也不用担心与外面的函数重名,因为他们的命名空间不同。
3、实例:自己的代码库
function(){ window['HXJ']={}//注册命名空间(实质就是给window对象添加属性'HXJ',这个属性时一个对象) //函数 function func1(){ alert("HelloWorld"); } window['HXJ']['func1']=func1;//向命名空间HXJ中注册func1函数(实质就是给HXJ对象添加方法) //函数 function func2(){ alert('你好'); } window['HXJ']['func2']=func2;//向命名空间注册func2 }
涉及到的知识点:
1)window['HXJ']={}
这就是我申请了一个命名空间,其实就是给window对象添加了一个属性:属性名即命名空间名,属性值是一个对象。
也可以写成:window.HXJ=New Object();
2. window['HXJ']['func1']=func1
就是给HXJ对象添加了一个方法;也可以写成,window.HXJ.func1=function(){};
3. 调用方法执行
HXJ.func1(), 自定义属性和方法与其他的属性和方法一样,window可以省略
4. 命名空间,解决了重名的问题。
5. 整个代码的包含在一个匿名函数内部,在浏览器加载页面时JS代码就会执行,这样就保证了代码加载完毕之后,命名空间创建完毕。
4、知识小结:
注意:
命名空间名不要太大众化,以免命名空间名相同。
优点:
通过命名空间创建代码库,降低耦合性:代码更加灵活,复用性更强,问题更加简单。
这里也体现了面向对象的思想,但可不要忘记Javascript只是基于面向对象呦!